【发布时间】:2011-08-30 12:21:18
【问题描述】:
我目前在我的应用程序中为 FTP 客户端使用 commons-net 库。我必须根据文件名通过某些标准从远程服务器下载一些文件。这是我实际代码的一个非常简化和简化的版本(因为我做了一些检查并捕获了所有可能的异常),但本质就在那里:
//ftp is FTPClient object
//...
files = ftp.listFiles();
for (FTPFile ftpFile : files) {
String name = ftpFile.getName();
if(conformsCriteria(name)) {
String path = outDirectory + File.separatorChar + name;
os = new FileOutputStream(path);
ftp.retrieveFile(name, os);
}
}
现在,我注意到当我运行这段代码时,等待几秒钟,然后拔掉网线,输出目录包含一些“空”文件加上实际下载的文件,这让我相信这种方法有点异步工作...但是又一次下载了一些文件(大小> 0KB),并且有这些空文件(大小= 0KB),这使我相信它仍然是序列化下载...另外,功能retrieveFile() 返回,我引用文档:
成功则为真,否则为假
我需要的是序列化下载,因为我需要记录每次不成功的下载。
我浏览 commons-net 源代码时看到的是,如果我没记错的话,会为每个 retrieveFile() 调用创建新的 Socket。
我对此感到很困惑,所以如果有人可以解释实际发生的事情,并使用这个库提供解决方案,或者推荐一些其他支持阻止每个文件下载的 FTP java 库,那就太好了。
谢谢。
【问题讨论】:
标签: java ftp apache-commons-net