【问题标题】:Apache NET ftp listFiles works but listFiles(String pathName) does not workApache NET ftp listFiles 有效,但 listFiles(String pathName) 无效
【发布时间】:2025-12-19 19:15:06
【问题描述】:

背景

我正在开发一个使用 spring-integration 通过 ftp 检索文件的应用程序。我正在使用 spring-integration 的 ftp 入站适配器之一。然而,即使经过我的反复尝试,我也无法让它工作。所以我开始查看代码,发现它使用 apache commons net api。

问题

使用 apache commons net 库,我以相同的方式在本地编写代码,但它不起作用。这是代码-

FTPClient client = new FTPClient();
client.connect("x.x.x.x", 21);
client.enterLocalPassiveMode();
client.login("xxx", "xxx");
FTPFile[] files = client.listFiles("/AMNH");

这会返回 0 行。这就是 spring-integration 执行调用的方式 - client.listFiles("/AMNH")。所以返回的文件列表是 0,即使我在 ftp 位置有文件,整个应用程序也处于空闲状态。

但是,如果我运行以下代码,我可以检索文件。我想知道当我们传递参数时方法 listFiles 有什么问题以及我们如何解决它?我这样说是因为我没有不执行 listFiles(String pathName) 的奢侈

FTPClient client = new FTPClient();
client.connect("x.x.x.x", 21);
client.enterLocalPassiveMode();
client.login("xxx", "xxx");
client.changeWorkingDirectory("/AMNH");
FTPFile[] files = client.listFiles("");

【问题讨论】:

  • 向我们展示这两种情况的日志文件。

标签: ftp spring-integration apache-commons-net


【解决方案1】:

请查看Reference Manual 关于changeWorkingDirectory。您只需要扩展DefaultFtpSessionFactory 并实现postProcessClientAfterConnect() 回调即可。

【讨论】:

  • remoteDirectory 属性不是出于同样的目的吗?我可以延长。但是有必要吗?
  • 似乎 remoteDirectory 自 4.3 以来已被弃用。啊..浪费了很多时间!非常感谢..
  • 这里的问题不在于远程目录属性,而在于您的 FTP 不允许列出不是来自工作目录根目录的文件
最近更新 更多