程序自动递归下载指定目录下的所有文件及子文件夹,上传时,自动递归创建服务器目录
/**
* @author: bruce.huang
* @createTime:2014年8月4日
*/
package com.framework.ftp;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;
import com.framework.xml.ServersFileReader;
import com.framework.xml.xmlbean.ServersBean;
/**
* @author black
*
*/
public class FtpClient {
HashMap<String, String> map = null;
private static final Logger log = Logger.getLogger(FtpClient.class);
public HashMap<String, String> downLoad(String serverName) {
// "ftpServer"
map = new HashMap<String, String>();
ServersBean cfb = ServersFileReader.readServerProperty().get(serverName);
FTPClient ftp = new FTPClient();
FileOutputStream fos = null;
try {
ftp.connect(cfb.getServerIP());
ftp.login(cfb.getServerUser(), cfb.getServerPassword());
String remoteFileName = cfb.getServerHomeDir();
fos = new FileOutputStream(remoteFileName);
ftp.setBufferSize(1024);
// 设置文件类型(二进制)
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
ftp.retrieveFile(remoteFileName, fos);
this.downloadFiles(ftp, remoteFileName, cfb.getLocalHomeDir());
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("FTP客户端出错!", e);
} finally {
try {
if (fos != null)
fos.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
ftp.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
return map;
}
/************************************
* 下载远程目录
* */
private void downloadFiles(FTPClient ftp, String remoteFileName, String localPath) throws IOException {
// 转移到FTP服务器目录
ftp.changeWorkingDirectory(remoteFileName);
FTPFile[] fs = ftp.listFiles();
for (FTPFile ff : fs) {
if (ff.isDirectory()) {
downloadFiles(ftp, remoteFileName + "/" + ff.getName(), localPath + "/" + ff.getName());
} else {
File localFile = new File(localPath + "/" + ff.getName());
if (!localFile.getParentFile().exists()) {
localFile.getParentFile().mkdirs();
}
OutputStream is = new FileOutputStream(localFile);
ftp.retrieveFile(ff.getName(), is);
map.put(ff.getName(), ff.getSize() + ""); // 放数据
log.info("ftp下载远程文件:" + remoteFileName + "/" + ff.getName() + "(字节数:" + ff.getSize() + ")" + "到" + localPath + "/" + ff.getName());
is.close();
}
}
}
public static boolean upload(String serverName) {
ServersBean serverBean = ServersFileReader.readServerProperty().get(serverName);
boolean success = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(serverBean.getServerIP(), serverBean.getServerPort());// 连接FTP服务器
ftp.login(serverBean.getServerUser(), serverBean.getServerPassword());// 登录
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(serverBean.getServerHomeDir());
uploadFiles(ftp, serverBean.getServerHomeDir(), new File(serverBean.getLocalHomeDir()));
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
/*********************
* 上传文件或文件夹
* */
private static void uploadFiles(FTPClient ftp, String remotePath, File localFile) {
if (localFile.isDirectory()) {
for (File ff : localFile.listFiles()) {
if (ff.isDirectory()) {
try {
ftp.changeWorkingDirectory(remotePath);
if (!ftp.changeWorkingDirectory(remotePath + "/" + localFile.getName())) {
log.info("FTP到目录(" + remotePath + ")下创建文件夹:" + ff.getName());
ftp.makeDirectory(ff.getName());
}
uploadFiles(ftp, remotePath + "/" + ff.getName(), ff);// 递归调用,传文件夹
} catch (IOException e) {
log.error("FTP服务器创建远程目录(" + remotePath + "/" + ff.getName() + ")失败:" + e.getMessage());
}
} else {
uploadFile(ftp, remotePath, ff);
}
}
} else {
uploadFile(ftp, remotePath, localFile);
}
}
/*****************************************
* 上传单个文件
* */
private static void uploadFile(FTPClient ftp, String remotePath, File localFile) {
try {
log.info("开始上传文件到:" + remotePath + "/==" + localFile.getName());
ftp.changeWorkingDirectory(remotePath);
ftp.storeFile(localFile.getName(), new FileInputStream(localFile));
} catch (IOException e) {
log.error("FTP向服务器(" + ftp.getRemoteAddress().getHostAddress() + ")上传文件(" + localFile.getAbsolutePath() + ")失败:" + e.getMessage());
}
}
}
文件引用的服务对象
/**
* @author: bruce.huang
* @createTime:2014年7月27日
*/
package com.framework.xml.xmlbean;
/**
* @author black
*
*/
public class ServersBean {
private String name;
private String description;
private String serverIP;
private int serverPort;
private String serverUser;
private String serverPassword;
private String serverHomeDir;
private String localHomeDir;
public String getLocalHomeDir() {
return localHomeDir;
}
public void setLocalHomeDir(String localHomeDir) {
this.localHomeDir = localHomeDir;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getServerIP() {
return serverIP;
}
public void setServerIP(String serverIP) {
this.serverIP = serverIP;
}
public int getServerPort() {
return serverPort;
}
public void setServerPort(int serverPort) {
this.serverPort = serverPort;
}
public String getServerUser() {
return serverUser;
}
public void setServerUser(String serverUser) {
this.serverUser = serverUser;
}
public String getServerPassword() {
return serverPassword;
}
public void setServerPassword(String serverPassword) {
this.serverPassword = serverPassword;
}
public String getServerHomeDir() {
return serverHomeDir;
}
public void setServerHomeDir(String serverHomeDir) {
this.serverHomeDir = serverHomeDir;
}
}
相关推荐
以下是一个简单的使用`FtpClient`上传文件的Java代码示例: ```java import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import java.io.FileInputStream; import java.io....
这个库提供了丰富的FTP操作API,包括连接、登录、文件上传和下载等。 1. **导入Apache Commons Net库**: 在项目中添加Apache Commons Net依赖,如果使用Maven,可以在pom.xml文件中添加以下依赖: ```xml ...
在“javaftp.rar”项目中,用户可能可以通过按钮选择本地文件或文件夹,然后使用FTPClient将它们上传到FTP服务器。同样,用户也可以下载服务器上的文件或文件夹,或者对已存在的文件进行重命名和删除操作。 ...
本教程将详细讲解如何使用Java实现FTP服务器的文件上传、下载以及创建多级文件夹的功能,并提供一个可以直接使用的demo。 首先,Java中的FTP操作通常依赖于`org.apache.commons.net.ftp`库,这个库提供了FTPClient...
FTP(File Transfer Protocol)是一种标准网络协议,用于在客户端和服务器之间上传、下载文件。本项目聚焦于如何将本地文件夹中的文件上传到FTP服务器的特定目录,这在网站更新、数据迁移或备份场景中尤其有用。我们...
总之,Java结合Apache Commons Net库可以轻松实现远程Ubuntu服务器的FTP文件和文件夹下载,以及下载文件的SHA256校验。通过理解和实践这些步骤,开发者可以构建自己的FTP客户端工具,满足各种远程数据交换的需求。
本文将详细讲解如何在Android应用中实现FTP的文件上传和下载功能,同时支持对文件夹的操作。 首先,我们需要了解FTP的基本概念。FTP是一种基于TCP的应用层协议,用于在网络上进行文件的传输。它定义了两个主要的...
在Java中,我们通常通过`FTPClient`来建立与FTP服务器的连接,设置用户凭据,然后进行文件的上传和下载。 以下是一个使用Apache Commons Net库进行FTP上传和下载的简单示例: 1. **FTP连接**: - 导入必要的库:`...
FTPClient类是实现FTP功能的核心,下面分别讲解下载和上传文件,以及处理文件夹的操作。 **1. 文件下载** 下载文件的基本流程包括连接服务器、登录、切换工作目录、获取文件信息,然后读取并保存文件到本地。以下...
本文将深入探讨如何使用.NET进行FTP文件和文件夹的上传操作。 首先,我们需要引入`System.Net.FtpClient`命名空间,它包含了处理FTP连接和文件操作的类。如果你使用的是.NET Framework,这个命名空间已经包含在内;...
在Java编程中,使用FTPClient进行文件传输时,可能会遇到一个常见的问题,即当尝试创建中文目录或上传具有中文名称的文件时,这些目录名和文件名会显示为乱码,通常表现为“??”这样的形式。这个问题主要是由于FTP...
本地文件的压缩和解压缩,本地文件单个和批量上传到服务器,并且可以选择上传到FTP服务器的目的目录,FTP服务器文件分级浏览,ftp服务器上文件单个和批量下载到本地指定目录,FTP服务器上新建文件夹,文件重命名,...
本篇将详细介绍如何使用C#进行FTP操作,包括上传文件、下载文件、在服务器上创建文件夹以及删除服务器上的文件。 首先,进行FTP操作需要使用到System.Net命名空间中的FtpWebRequest和FtpWebResponse类。以下是一些...
Android 使用 FTP 方式实现文件上传和下载 Android 使用 FTP 方式实现文件上传和下载是移动应用开发中的一项重要功能,特别是在 OTA 在线升级项目中,文件上传和下载是一个关键步骤。下面就 Android 使用 FTP 方式...
ftpClient.changeWorkingDirectory(path); ftpClient.enterLocalPassiveMode(); //由于apache不支持中文语言环境,通过定制类解析中文日期类型 ftpClient.configure(new FTPClientConfig(...
以上就是使用Java进行FTP文件上传和下载的基本操作,对于文件夹的处理,通常需要递归地处理目录内的所有文件和子目录。在Apache Commons Net中,可以使用 `FTPClient` 的 `changeWorkingDirectory()` 和 `listNames...
总结来说,C#环境下FTP文件上传涉及的关键知识点有:FTP协议,System.Net.FtpWebRequest类的使用,网络凭据的设置,文件读取和流操作,以及可能的递归处理来上传文件夹。在实际项目中,根据需求选择合适的方法和库,...
* 如果不需要移动,只是需要文件重命名,可以使用ftp.rename(oleName,newName) * @param ftp * @param oldPath * @param newPath * @return */ public boolean moveFile(FTPClient ftp,String oldPath,...
FTP(File Transfer Protocol)是互联网上广泛使用的协议之一,用于在计算机之间进行文件的上传和下载。这个项目可能是为了帮助用户方便、高效地通过FTP服务器管理他们的文件。 FTPClient_src标签暗示了这个压缩包...
同样,文件和文件夹下载也是通过FTPClient实现。下载文件夹意味着下载整个目录结构,这可能涉及到创建本地文件系统的镜像。 4. **进度显示**: 工具中的“带进度”特性,意味着它实现了文件传输的进度反馈。这...