写个功能要从ftp服务下载文件,在本地的ftp服务一切ok( Mac 10.15.5 环境),但是在Linux容器环境发现不管切换到哪个目录,获取什么文件,调用FTPClient.listFiles()方法时返回的始终为空,但是代码又运行正常没有异常抛出。然后断点ftp.getReplyCode()也返回230登陆成功.

解决的方法很简单,

在调用FTPClient.listFiles()方法前,先调用FTPClient.enterLocalPassiveMode();就可以了。

/**

* 下载文件 *

*

* @param pathname FTP服务器文件目录 *

* @param filename 文件名称 *

* @param localpath 下载后的文件路径 *

* @return 下载的文件File

*/

public File downloadFileGetFile(String pathname, String filename, String localpath) {

boolean flag = false;

OutputStream os = null;

File outPutFile = null;

try {

System.out.println("FTP开始下载文件");

initFtpClient();

//切换FTP目录

ftpClient.changeWorkingDirectory(pathname);

System.out.println("改变ftp服务器路径:" + pathname);

ftpClient.enterLocalPassiveMode(); // Use passive mode as default

FTPFile[] ftpFiles = ftpClient.listFiles();

for (FTPFile file : ftpFiles) {

if (filename.equalsIgnoreCase(file.getName())) {

File localFile = new File(localpath + "/" + file.getName());

os = new FileOutputStream(localFile);

ftpClient.retrieveFile(file.getName(), os);

os.close();

outPutFile = localFile;

} else {

System.out.println("ftp服务器上文件:" + file.getName() +"寻找的fileName:" + filename);

}

}

ftpClient.logout();

flag = true;

System.out.println("FTP下载文件成功");

} catch (Exception e) {

System.out.println("FTP下载文件失败");

e.printStackTrace();

} finally {

if (ftpClient.isConnected()) {

try {

ftpClient.disconnect();

} catch (IOException e) {

e.printStackTrace();

}

}

if (null != os) {

try {

os.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return outPutFile;

}

这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据。

为什么要这样做呢,因为ftp server可能每次开启不同的端口来传输数据,但是在linux上,由于安全限制,可能某些端口没有开启,所以就出现获取不了文件目录的情况。

亲测可用

ftp java listfiles_Java FTPClient.listFiles()不能获取目录里的文件相关推荐

  1. FTPClient.listFiles()不能获取目录里的文件

    为什么80%的码农都做不了架构师?>>>    写个功能要从ftp服务下载文件,在本地的ftp服务一切ok(window环境),但是在Linux环境发现不管切换到哪个目录,获取什么文 ...

  2. FTPClient.listFiles() 获取目录里的文件为空的解决

    写个功能要从ftp服务下载文件,在本地的ftp服务一切ok(window环境),但是在Linux环境发现不管切换到哪个目录,获取什么文件,调用FTPClient.listFiles()方法时返回的始终 ...

  3. FTPClient.listFiles(filePath)获取文件数量为空

    java使用FTPClient.listFiles(filePath)从ftp的指定目录拉取文件为空,FTPClient.listFiles()却能拉取到全部文件夹及文件,证明ftp连接没问题,可能是 ...

  4. 【Java】获取目录及其子目录文件的相关事宜

    获取目录及其子目录文件的代码 public class Main {public static void main(String[] args) {String path = "D:/&qu ...

  5. Java中FTPClient上传中文目录、中文文件名乱码问题解决方法

    Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 参考文章: (1)Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 (2)https://www.cnblog ...

  6. java获取文件目录列表_获取目录中的文件列表

    我正在开发一个C项目,我需要获取目录中的文件列表 . 我正在使用dirent.h但是在使用它时遇到了一些问题,我正在Linux下构建程序 . 当我尝试构建程序时,我收到以下错误 myClass:err ...

  7. C/C++ 获取目录下的文件列表信息

    在C/C++编程时,需要获取目录下面的文件列表信息. 1.数据结构 struct dirent { long d_ino;                 /* inode number 索引节点号 ...

  8. 关于BaiduPCS-Go不能用问题解决,报错【获取目录下的文件列表 遇到错误, 远端服务器返回错误】

           BaiduPCS-Go不能使用报错:获取目录下的文件列表 遇到错误, 远端服务器返回错误, 代码: 4, 消息: No permissionto do this operation, 路 ...

  9. php如何将读取到的mysql内容按发布的日期分割显示_php如何读取文件夹目录里的文件并按照日期,大小,名称排序...

    最近用到的php读取文件夹目录里的文件,并按照日期,大小,名称排序,所以写了一个方法,备用. function dir_size($dir,$url){ $dh = @opendir($dir);   ...

最新文章

  1. python使用imbalanced-learn的SMOTENC方法进行上采样处理数据不平衡问题
  2. boost::mpl::sign相关的测试程序
  3. kmeans改进 matlab,基于距离函数的改进k―means 算法
  4. 阿里云混合云管理平台发布帮您管好云
  5. 在Myeclipse中配置 jboss 图解
  6. Portlet开发指南第三章
  7. sxe增加服务器,sXe Injected 反作弊插件
  8. 微信公众号登陆、模板发送、access_token获取 PHP代码
  9. ExpRe[10] Ubuntu[2] 准备神秘软件、备份恢复软件
  10. 关于某某大学校园网认证系统的一些工作
  11. 战神引擎mud2没有mysql文件_战神引擎架设不要(MongoDB)芒果数据库配置教程
  12. B站秋招编程题:扭蛋机
  13. APM的3DR无线数传的安装和调试
  14. 如何裁剪图片,裁剪图片的几个方法
  15. SSM框架,ajax实现登陆界面验证和登陆成功后页面跳转问题
  16. 第三方支付平台:银联在线支付
  17. [小项目]手把手教你C语言哈夫曼压缩/解压缩
  18. 缺陷的严重程度(Severity)
  19. 四级单词词组积累(二)
  20. 微软禁止员工购买苹果Mac iPad系列产品

热门文章

  1. linux 功能测试宏 POSIX_C_SOURCE
  2. linux shell 执行 几种方式区别 bash source .
  3. linux sparse 内核代码静态检查
  4. vm虚拟机中 Kali更新后 不能自动适应窗口
  5. PHP Memcache详解
  6. 内存管理单元--MMU
  7. Android开发--Input/OutputStream操作
  8. Linux免密登陆(CentOS7.2为例)
  9. Pci设备驱动:设备枚举
  10. android 自定义textview 垂直滚动,Android中TextView如何实现水平和垂直滚动