我目前在我的应用程序中为 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 库,那就太好了。
谢谢。