`
ly_mad
  • 浏览: 30091 次
社区版块
存档分类
最新评论

Java实现FTP上传下载文件

阅读更多
自己写的一个FTP文件上传下载类,该程序中包含内容为:
1、远程FTP服务连接
2、FTP上传文件
3、FTP下载文件,注意:在下载多个文件时,必须执行:ftpClient.completePendingCommand();否则,is = ftpClient.retrieveFileStream(file.getName());返回NUll
4、FTP文件的删除


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;

/**
*  ftp上传下载类
* @author
*
*/
public class BankReceiptFTPUtil {
private Logger logger = Logger.getLogger(BankReceiptFTPUtil.class);
private String ip ;
private int port;
private String pwd;
private String user;
private FTPClient ftpClient;

public BankReceiptFTPUtil(String ip, int port, String user, String pwd) {
this.ip = ip;
this.port = port;
this.user = user;
this.pwd = pwd;
}

/**
* 连接FTP服务器
* @param ip ip地址
* @param port 端口号
* @param user 用户名
* @param pwd 密码
* @return
* @throws Exception
*/
public boolean connectServer(String ip, int port, String user, String pwd) throws Exception {
boolean isSuccess = false;
try {
ftpClient = new FTPClient();
ftpClient.connect(ip, port);
ftpClient.setControlEncoding("GBK");
FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");
ftpClient.login(user, pwd);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
if(FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
isSuccess = true;
} else {
ftpClient.disconnect();
logger.error("连接ftp服务器异常!");
throw new BossOperException();
}
} catch (Exception e) {
logger.error("连接FTP服务器异常.." ,e);
}

return isSuccess ;
}

/**
* 远程FTP下载文件
* @param remotePath
* @param localPath
* @param fileName
* @return
* @throws Exception
*/
public List<File> downloadFile(String remotePath, String localPath, List<File> files) throws Exception {
List<File> result = new ArrayList<File>();
File fileOut = null ;
InputStream is = null ;
FileOutputStream os = null ;
try {
if(connectServer(this.getIp(), this.getPort(), this.getUser(), this.getPwd())) {
ftpClient.changeWorkingDirectory(remotePath);
FTPFile[] ftpFiles = ftpClient.listFiles();

for(FTPFile file : ftpFiles) {
is = ftpClient.retrieveFileStream(file.getName());
if(localPath != null && !localPath.endsWith(File.separator)) {
localPath = localPath + File.separator;
File path = new File(localPath);
if(!path.exists()) {
path.mkdirs();
}
}
fileOut = new File(localPath + file.getName());
os = new FileOutputStream(fileOut);
byte[] bytes = new byte[1024];
int c ;
while((c=is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}

result.add(fileOut);
ftpClient.completePendingCommand();
os.flush();
is.close();
os.close();
}

for(FTPFile file : ftpFiles) {
ftpClient.deleteFile(file.getName());
}
}
} catch(Exception e) {
logger.error("从FTP服务器下载文件异常:", e);
} finally {
ftpClient.logout();
if(ftpClient.isConnected()) {
ftpClient.disconnect();
}
}

return result;
}

/**
* FTP上传文件
* @param remotePath
* @param localPath
* @param files
* @return
* @throws Exception
*/
public File uploadFile(String remotePath, List<File> files) throws Exception {
File fileIn = null;
OutputStream os = null;
FileInputStream is = null;
try {
for(File file : files) {
if(connectServer(this.getIp(), this.getPort(), this.getUser(), this.getPwd())) {
ftpClient.changeWorkingDirectory(remotePath);
os = ftpClient.storeFileStream(file.getName());
fileIn = file;
is = new FileInputStream(fileIn);
byte[] bytes = new byte[1024];
int c ;
while((c=is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
}
}
} catch(Exception e) {
logger.error("上传FTP文件异常: ", e);
} finally {
os.close() ;
is.close();
ftpClient.logout();
if(ftpClient.isConnected()) {
ftpClient.disconnect();
}
}

return fileIn;
}

public String getIp() {
return ip;
}

public void setIp(String ip) {
this.ip = ip;
}

public int getPort() {
return port;
}

public void setPort(int port) {
this.port = port;
}

public String getPwd() {
return pwd;
}

public void setPwd(String pwd) {
this.pwd = pwd;
}

public String getUser() {
return user;
}

public void setUser(String user) {
this.user = user;
}
}
分享到:
评论
1 楼 JimmyLincole 2014-04-11  
谢谢,
3、FTP下载文件,注意:在下载多个文件时,必须执行:ftpClient.completePendingCommand();否则,is = ftpClient.retrieveFileStream(file.getName());返回NUll

这条帮我解决了问题!thx a billion

相关推荐

    Java实现FTP批量大文件上传下载.pdf

    Java实现FTP批量大文件上传下载 一、Java FTP客户端库的选择 在选择Java FTP客户端库时,需要考虑多个因素,例如性能、安全性、可靠性等。当前有多种FTP客户端库可供选择,例如J-FTP、SimpleFTP、FTPClient等。每...

    Java实现FTP文件上传和下载

    以下将详细介绍如何使用Java实现FTP文件上传和下载的步骤,以及涉及到的关键知识点。 首先,Java通过`java.net`和`javax.net`包提供了FTP功能,但这些原生API并不易用。因此,大多数开发人员会使用第三方库如Apache...

    Java实现FTP批量大文件上传下载

    Java 实现 FTP 批量大文件上传下载 本文介绍了如何使用 Java 实现 FTP 服务器上的大批量文件的上传和下载,处理大文件的上传和下载。通过 Java 现有的可用的库来编写 FTP 客户端代码,并开发成 Applet 控件,做成...

    用JAVA实现Ftp文件上传下载

    在`TestFtpUpload`文件中,可以编写单元测试或集成测试来验证FTP上传和下载功能。例如,你可以创建一个测试类`FtpOperationsTest`,包含如下方法: ```java import org.junit.jupiter.api.Test; import org.apache....

    JAVA实现ftp上传,下载

    在Java中实现FTP上传和下载,我们可以利用Apache Commons Net库,它提供了一系列的FTP客户端API,方便我们进行文件操作。以下是对这个主题的详细讲解: 一、Apache Commons Net库介绍 Apache Commons Net是Apache...

    java实现ftp上传下载

    FTP上传文件的核心是`FTPClient.storeFile(String remote, InputStream local)`方法,`remote`参数是服务器上的目标文件名,`local`参数是从本地读取的文件流。例如: ```java FTPClient ftp = new FTPClient(); ...

    java实现ftp自动上传文件

    Java 实现 FTP 自动上传文件是一项常见的任务,尤其在自动化部署、数据同步或者日志传输等场景中。本文将深入探讨如何使用Java编程语言来构建一个FTP文件上传系统,同时结合Log4j日志框架和命令行信息的处理。 首先...

    Java实现FTP上传与下载

    这篇博客“Java实现FTP上传与下载”可能详细介绍了如何利用Java来实现FTP客户端的功能,包括文件的上传和下载。这里我们将深入探讨Java中实现FTP操作的核心知识点。 首先,Java通过`commons-net`库提供了对FTP的...

    java实现ftp上传jar包

    以上就是关于"java实现ftp上传jar包"的相关知识点,涵盖了FTP协议、相关库的使用、JAR文件的处理以及基本的Java FTP操作。在实际项目中,你可能还需要考虑其他因素,如连接超时、重试策略、文件权限管理等。

    java实现的ftp文件上传

    首先,我们来看标题和描述中的关键词"java实现的ftp文件上传",这表明我们要讨论的是使用Java编程语言来实现在FTP服务器上上传文件的过程。Java提供了一个名为`java.net.Socket`的基本网络连接类,但直接使用它来...

    java实现ftp上传和下载文件功能.

    在Java中实现FTP(文件传输协议)上传和下载文件功能,通常会使用Apache Commons Net库。这个库提供了FTPClient类,使得与FTP服务器交互变得简单。以下是对代码中涉及的知识点的详细解释: 1. **Apache Commons Net...

    java ftp上传 下载 文件压缩解压

    这篇博客“java ftp上传 下载 文件压缩解压”很可能是关于如何使用Java实现FTP文件上传、下载以及文件的压缩与解压功能。下面我们将深入探讨这些知识点。 首先,FTP上传和下载是Java中常见的任务,通常通过`java...

    java 实现ftp上传下载

    总结来说,Java实现FTP上传下载涉及连接管理、文件操作、多线程处理、异常处理等多个方面。使用Apache Commons Net库能简化这些操作,但正确地处理细节和异常情况仍然至关重要。通过理解和实践这些知识点,你将能够...

    java实现文件上传到ftp

    7. **上传文件**:`ftp.storeFile(remoteFilePath, fis);` 这里`remoteFilePath`是服务器上文件的目标路径。 8. **关闭连接**:操作完成后,记得关闭连接和流:`ftp.disconnect();` 和 `fis.close();` 在`...

    java实现Ftp批量下载文件及解压

    通过Java实现FTP批量下载文件以及解压的功能,可以极大地提高工作效率,特别是在处理大量数据时。以下是一份详细的步骤介绍: 首先,我们需要引入Java的FTP客户端库,如Apache Commons Net库。这个库提供了丰富的...

    JAVA实现简单的对FTP上传与下载

    总的来说,使用Java实现FTP上传和下载涉及网络通信、文件操作和错误处理等多个方面的知识。通过"ftpLoadDown.jar"库,我们可以简化这个过程,使得开发者可以专注于业务逻辑,而无需关心底层的FTP协议细节。在实际...

    用Java实现FTP批量大文件上传下载

    Java,FTP,用Java实现FTP批量大文件上传下载

Global site tag (gtag.js) - Google Analytics