自己写的一个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;
}
}
分享到:
相关推荐
用JAVA实现Ftp文件上传下载,提供实现方法和测试用例
java实现ftp上传和下载文件功能 文档里有详细的代码
一款由java实现ftp自动上传整个磁盘所有文件,包括目录,下面的JTextArea读取Log4j及命令行的信息,采用第三方ftpClient.不过下载的部分还没有时间去做.
java实现ftp上传jar包,里边包括edtftpj.jar、commons-net-1.4.1.jar、jakarta-oro-2.0.8.jar
Java,FTP,用Java实现FTP批量大文件上传下载
Java实现FTP文件上传和下载
用Java实现FTP批量大文件上传下载.doc 用Java实现FTP批量大文件上传下载.doc 用Java实现FTP批量大文件上传下载.doc
Java实现FTP批量大文件上传下载.pdf
java实现的ftp文件上传
Java实现FTP批量大文件上传下载的东西
java实现文件上传到fpt,里面一些很简单的操作适合初学者。
JAVA实现FTP协议文件上传
用Java实现FTP批量大文件上传下载
完整实现ftp上传与下载并解析csv文件,并实现对文件内容进行分析及错误信息的提示及保存日志,并可以实现多个文件同时下载,并且同时解析
用Java实现FTP批量大文件上传下载,适用于数据量比较大的情况下。。。。。。。