您的位置:首页 > 编程语言 > Java开发

java下载远程FTP文件至本地

2017-10-19 13:30 507 查看

代码块

例如:

public Map<String, Object> downloadFileFromFTP(){
Map<String, Object> data = new HashMap<>();

//获取项目在tomcat部署的路径
String nodepath = this.getClass().getClassLoader().getResource("/").getPath();
String filePath = nodepath.substring(1, nodepath.length() - 17);

//通过ftpAddress、ftpName和ftpPassword连接ftp
FTPClient ftpClient = new FTPClient();
ftpClient.connect(ftpAddress);
boolean isLogin = ftpClient.login(ftpName, ftpPassword);
//如果连接成功则继续执行
if(isLogin){
try {
//调用FTPClient.enterLocalPassiveMode();这个方法的意思就是每次数据连接之前,
//ftp client告诉ftp server开通一个端口来传输数据。为什么要这样做呢,因为ftp server
//可能每次开启不同的端口来传输数据,但是在linux上,由于安全限制,可能某些端口没有开启,
//所以就出现阻塞。
ftpClient.enterLocalPassiveMode();
//ftpFilePath为所需下载文件在远程FTP服务器根目录中的路径
//fs为ftpFilePath下所有文件集合
FTPFile[] fs = ftpClient.listFiles(ftpFilePath);
for(FTPFile ff:fs){
String f= new String(ff.getName().getBytes("iso-8859-1"), "utf-8");
//name为所需下载文件名
if(f.equals(name + ".mp4")){
//将视频名返回前端界面
data.put("videoName",f);
//该语句仅仅是在本地TOMCAT服务器指定路径创建了一个对象
File localFile = new File(filePath + "/temp/video/" + f);
//如果所创建对象已经存在,则直接跳过,否则执行
if(!localFile.exists()){
//如果文件不存在,则从远程FTP下载,并存储至本地指定路径
OutputStream is = new FileOutputStream(localFile);
//设置下载文件相对远程FTP根目录所处的路径
ftpClient.changeWorkingDirectory(path);
//FTPClient是经常用到的ftp第三方开发包。但是其默认的编码方式是基于“ISO-8859-1”的。
//因此对文件名含有中文的文件会下载失败,将文件名转换为ISO-8859-1
Boolean b = ftpClient.retrieveFile(ff.getName(), is);
is.close();
}
break;
}
}
ftpClient.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException ioe) {
}
}
}
}
return data;
}


开发环境客户端是在windows下tomcat的一个web应用 ; 部署环境是在 linux 下的tomcat的一个web应用。由ftpclient从ftp服务器上取得的文件。在开发环境运行正常(windows),但部署后(linux),发现所下载文件都无法打开。经过对比发现存在字节缺失的情况 。原因如:

windows的回车换行时:/r/n

linux的回车换行是:/n

因此在开始下载文件前设置传输类型:

ftpClient.changeWorkingDirectory(ftpPath);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
Boolean b = ftpClient.retrieveFile(ff.getName(), is);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java ftp