java FTP下载 部分文件为空

renzuguo 2018-07-29 12:57:55
测试下面的代码,不知道为什么子文件夹里面的文件都可以成功下载,最外层的文件下载下来只有文件名,大小为0Kb

public void DownFile(String remotePath,String localPath) {
try {
ftp.changeWorkingDirectory(remotePath); // 转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles();
for (FTPFile ff : fs) {
if(ff.isFile()){
System.out.println(remotePath);
System.out.println(localPath);
File localFile = new File(localPath+"\\"+ff.getName());
if(!localFile.exists()){
System.out.println("文件不存在,下载");
OutputStream is = new FileOutputStream(localFile);
ftp.retrieveFile(ff.getName(), is);
is.close();
}else{
System.out.println("文件存在,不用下载");
}
}else{
File myPath = new File(localPath+"\\"+ff.getName());
if(!myPath.exists()){
myPath.mkdir();
}
DownFile(remotePath+ff.getName()+"/",localPath+"\\"+ff.getName());
}
}
} catch (IOException ex) {
Logger.getLogger(PDOAupdate.class.getName()).log(Level.SEVERE, null, ex);
}
}
...全文
597 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能。可以将ftp4j嵌到你的Java应用中,来传输文件(包括上传和下载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件ftp4j提供多种方式连接到远程FTP服务器包括:通过 TCP/IP直接连接,通过FTP代理、HTTP代理、SOCKS4/4a代理和SOCKS5代理连接,通过SSL安全连接。 简单应用---API介绍 The main class of the library is FTPClient (it.sauronsoftware.ftp4j.FTPClient). 1. 创建FTPClient实例 FTPClient client = new FTPClient(); 连接到指定的FTP服务器(域名或IP) 不指定端口,则使用默认端口21 client.connect("ftp.host.com", /*21*/); 登录验证 client.login("user", "pswd"); 下面是匿名登录 //client.login("anonymous", "密码任意设置"); client.login("anonymous", "ftp4j"); 安全退出 client.disconnect(true); //强制退出 //client.disconnect(false); 文件以及文件夹操作: 取得当前文件夹 String dir = client.currentDirectory(); 改变当前文件夹 client.changeDirectory(newPath); //绝对路径 //client.changeDirectory("/an/absolute/one"); //相对路径 //client.changeDirectory("relative"); //回退到上级目录 client.changeDirectoryUp(); //重命名文件文件夹 client.rename("oldname", "newname"); //移动文件文件夹 client.rename("myfile.txt", "myfolder/myfile.txt"); //删除文件 client.deleteFile(relativeOrAbsolutePath); //client.deleteFile("useless.txt"); //创建目录 client.createDirectory("newfolder"); //删除目录(空目录) client.deleteDirectory(absoluteOrRelativePath); //client.deleteDirectory("oldfolder"); //浏览文件 FTPFile[] list = client.list(); //使用通配浏览文件 FTPFile[] list = client.list("*.jpg"); //显示文件文件夹的修改时间 java.util.Date md = client.modifiedDate("filename.ext"); //上传和下载文件 //下载服务器上remoteFile.ext 下载到本地 localFile.ext client.download("remoteFile.ext", new java.io.File("localFile.ext")); //上传 本地 localFile.ext 到当前目录 client.upload(new java.io.File("localFile.ext")); // 上传和下载文件时, 监听文件传输的状态 public class MyTransferListener implements FTPDataTransferListener { //文件开始上传或下载时触发 public void started() { } //显示已经传输的字节数 public void transferred(int length) { } //文件传输完成时,触发 public void completed() { } //传输放弃时触发 public void aborted() { // Transfer aborted } //传输失败时触发 public void failed() { } 示例: client.download("remoteFile.ext", new java.io.File("localFile.ext"), new MyTransferListener()); client.upload(new java.io.File("localFile.ext"), new MyTransferListener()); //ftp4j也支持断点续传功能 下面是一个简单示例:*参数 1056 跳过 1056字节点下载 client.download("remoteFile.ext", new java.io.File("localFile.ext"), 1056); 设置传输模式 //ASC码 client.setType(FTPClient.TYPE_TEXTUAL); //二进制 client.setType(FTPClient.TYPE_BINARY); //自动选择(根据文件内容) client.setType(FTPClient.TYPE_AUTO); //设置连接器 client.setConnector(connector); SSL 套接字连接 client.setConnector(it.sauronsoftware.ftp4j.connectors.SSLConnector) client.setConnector(anyConnectorYouWant);

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧