ftp java listfiles_Java FTPClient.listFiles()不能获取目录里的文件
写个功能要从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()不能获取目录里的文件相关推荐
- FTPClient.listFiles()不能获取目录里的文件
为什么80%的码农都做不了架构师?>>> 写个功能要从ftp服务下载文件,在本地的ftp服务一切ok(window环境),但是在Linux环境发现不管切换到哪个目录,获取什么文 ...
- FTPClient.listFiles() 获取目录里的文件为空的解决
写个功能要从ftp服务下载文件,在本地的ftp服务一切ok(window环境),但是在Linux环境发现不管切换到哪个目录,获取什么文件,调用FTPClient.listFiles()方法时返回的始终 ...
- FTPClient.listFiles(filePath)获取文件数量为空
java使用FTPClient.listFiles(filePath)从ftp的指定目录拉取文件为空,FTPClient.listFiles()却能拉取到全部文件夹及文件,证明ftp连接没问题,可能是 ...
- 【Java】获取目录及其子目录文件的相关事宜
获取目录及其子目录文件的代码 public class Main {public static void main(String[] args) {String path = "D:/&qu ...
- Java中FTPClient上传中文目录、中文文件名乱码问题解决方法
Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 参考文章: (1)Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 (2)https://www.cnblog ...
- java获取文件目录列表_获取目录中的文件列表
我正在开发一个C项目,我需要获取目录中的文件列表 . 我正在使用dirent.h但是在使用它时遇到了一些问题,我正在Linux下构建程序 . 当我尝试构建程序时,我收到以下错误 myClass:err ...
- C/C++ 获取目录下的文件列表信息
在C/C++编程时,需要获取目录下面的文件列表信息. 1.数据结构 struct dirent { long d_ino; /* inode number 索引节点号 ...
- 关于BaiduPCS-Go不能用问题解决,报错【获取目录下的文件列表 遇到错误, 远端服务器返回错误】
BaiduPCS-Go不能使用报错:获取目录下的文件列表 遇到错误, 远端服务器返回错误, 代码: 4, 消息: No permissionto do this operation, 路 ...
- php如何将读取到的mysql内容按发布的日期分割显示_php如何读取文件夹目录里的文件并按照日期,大小,名称排序...
最近用到的php读取文件夹目录里的文件,并按照日期,大小,名称排序,所以写了一个方法,备用. function dir_size($dir,$url){ $dh = @opendir($dir); ...
最新文章
- python使用imbalanced-learn的SMOTENC方法进行上采样处理数据不平衡问题
- boost::mpl::sign相关的测试程序
- kmeans改进 matlab,基于距离函数的改进k―means 算法
- 阿里云混合云管理平台发布帮您管好云
- 在Myeclipse中配置 jboss 图解
- Portlet开发指南第三章
- sxe增加服务器,sXe Injected 反作弊插件
- 微信公众号登陆、模板发送、access_token获取 PHP代码
- ExpRe[10] Ubuntu[2] 准备神秘软件、备份恢复软件
- 关于某某大学校园网认证系统的一些工作
- 战神引擎mud2没有mysql文件_战神引擎架设不要(MongoDB)芒果数据库配置教程
- B站秋招编程题:扭蛋机
- APM的3DR无线数传的安装和调试
- 如何裁剪图片,裁剪图片的几个方法
- SSM框架,ajax实现登陆界面验证和登陆成功后页面跳转问题
- 第三方支付平台:银联在线支付
- [小项目]手把手教你C语言哈夫曼压缩/解压缩
- 缺陷的严重程度(Severity)
- 四级单词词组积累(二)
- 微软禁止员工购买苹果Mac iPad系列产品
热门文章
- linux 功能测试宏 POSIX_C_SOURCE
- linux shell 执行 几种方式区别 bash source .
- linux sparse 内核代码静态检查
- vm虚拟机中 Kali更新后 不能自动适应窗口
- PHP Memcache详解
- 内存管理单元--MMU
- Android开发--Input/OutputStream操作
- Linux免密登陆(CentOS7.2为例)
- Pci设备驱动:设备枚举
- android 自定义textview 垂直滚动,Android中TextView如何实现水平和垂直滚动