Apache Commons Net FTPClient 和 listFiles()
Posted
技术标签:
【中文标题】Apache Commons Net FTPClient 和 listFiles()【英文标题】:Apache Commons Net FTPClient and listFiles() 【发布时间】:2011-02-12 08:49:00 【问题描述】:谁能解释一下下面的代码有什么问题?我尝试了不同的主机,FTPClientConfigs,它可以通过 firefox/filezilla 正确访问......问题是我总是得到空文件列表,没有任何异常(files.length == 0)。我使用与 Maven 一起安装的 commons-net-2.1.jar。
FTPClientConfig config = new FTPClientConfig(FTPClientConfig.SYST_L8);
FTPClient client = new FTPClient();
client.configure(config);
client.connect("c64.rulez.org");
client.login("anonymous", "anonymous");
client.enterRemotePassiveMode();
FTPFile[] files = client.listFiles();
Assert.assertTrue(files.length > 0);
【问题讨论】:
任何错误信息?不知道你的问题是什么! 问题是我总是得到空文件列表,没有任何异常(files.length == 0)。问题已更新。 它在我的 FTP 服务器上运行良好,除了我不调用 client.configure(...) 我还尝试了 ftp.belnet.be / ftp.ccc.uba.ar 和一些私有 ftp 服务器,但无法使其工作(即使没有 client.configure)...我也尝试过禁用 windows 防火墙和杀毒软件...你能分享一些工作的 ftp 主机吗? ftp4j 基本示例工作正常,但我想知道我的 commons-net 代码有什么问题... 【参考方案1】:通常匿名用户不需要密码,试试
client.login("anonymous", "");
【讨论】:
【参考方案2】:找到了!
问题是您希望在连接后但在登录之前进入被动模式。 您的代码对我没有任何回报,但这对我有用:
import org.apache.commons.net.ftp.FTPClient;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPFile;
public class BasicFTP
public static void main(String[] args) throws IOException
FTPClient client = new FTPClient();
client.connect("c64.rulez.org");
client.enterLocalPassiveMode();
client.login("anonymous", "");
FTPFile[] files = client.listFiles("/pub");
for (FTPFile file : files)
System.out.println(file.getName());
给我这个输出:
c128 c64 c64.hu 传入 加4【讨论】:
(关于 BTW 评论:Assert.assertTrue
来自 JUnit 或 TestNG;Java 的断言将只是 assert
。无论如何,我想这只是为了向问题的读者说明期望的结果。 )
@Jonik 哦,没错。我没注意。我删除了那个位。
有localpassive remotepassive、localactive、remoteactive我一个接一个地试了,还是localpassive有效
非常感谢我亲爱的朋友,我搜索了所有网站,但找不到任何解决此问题的方法。你的代码救了我!很酷
非常感谢!你刚刚拯救了我的星期五晚上!【参考方案3】:
只使用enterLocalPassiveMode()
对我不起作用。
我使用了以下代码,效果很好。
ftpsClient.execPBSZ(0);
ftpsClient.execPROT("P");
ftpsClient.type(FTP.BINARY_FILE_TYPE);
完整的例子如下,
FTPSClient ftpsClient = new FTPSClient();
ftpsClient.connect("Host", 21);
ftpsClient.login("user", "pass");
ftpsClient.enterLocalPassiveMode();
ftpsClient.execPBSZ(0);
ftpsClient.execPROT("P");
ftpsClient.type(FTP.BINARY_FILE_TYPE);
FTPFile[] files = ftpsClient.listFiles();
for (FTPFile file : files)
System.out.println(file.getName());
【讨论】:
找不到方法:ftpClient.execPBSZ(0); ftpClient.execPROT("P") 您使用的是 FTPClient 还是 FTPSClient?这些方法只存在于 FTPSClient 中。【参考方案4】:对我来说,当我在调用 ftpClient.listFiles()
之前使用 ftpClient.enterLocalPassiveMode()
时,它起作用了。
完整代码如下:
final List<String> files = new ArrayList<>();
try
ftpClient.enterLocalPassiveMode();
String[] f = null;
if (parentDir.isEmpty())
f = ftpClient.listNames();
else
f = ftpClient.listNames(parentDir);
for (String s :f )
files.add(s);
catch (IOException e)
e.printStackTrace();
postError(e.getMessage()!= null?e.getMessage():e.toString());
【讨论】:
以上是关于Apache Commons Net FTPClient 和 listFiles()的主要内容,如果未能解决你的问题,请参考以下文章
maven中,POM.XML中怎么配置org.apache.commons.net.ftp引用包,求配置代码- -
[Java] 使用 Apache的 Commons-net库 实现FTP操作
org.apache.commons.net.MalformedServerReplyException: Could not parse response code. Server Reply: S
org.apache.commons.net.MalformedServerReplyException: Could not parse response code. Server Reply: S
org.apache.commons.net.MalformedServerReplyException: Could not parse response code. Server Reply: S