我有一个FTP文件列表,我只能将第一个FTPFile
转换为File
。我正在使用org.apache.commons.net.ftp
库。
我的代码第一次正常工作:
for (FTPFile file : files) {
if(ftpClient.sendNoOp()){
if(file.getName()!=null || !file.getName().equals("")) {
InputStream iStream=ftpClient.retrieveFileStream(file.getName());
File file2 = File.createTempFile("xml", null);
FileUtils.copyInputStreamToFile(iStream, file2);
iStream.close();
}
}
}
在此代码中,循环仅遍历时间,FTPFile
转换为File
,之后将获得由 null
值创建的异常在ftpClient.retrieveFileStream(file.getName())
中生成
请帮忙。
答案 0 :(得分:1)
下载文件后,您必须完成传输。这就是您能够下载第一个文件并且第二个文件下载有问题的原因。
success = ftpClient.completePendingCommand();
if (success) {
System.out.println("File has been downloaded successfully.");
}
如果问题仍然存在,您可以调用ftpClient.getReplyCode(),它会告诉您无法下载文件的原因。通常,retrieveFileStream在无法打开数据连接时返回null
答案 1 :(得分:0)
来自FTPClient#listFiles()
的Javadoc:
注意:如果任何单个文件列表无法解析,则此数组可能包含空成员。调用者应在引用之前检查每个条目是否为null。
您必须在数组中返回的每个项目上检查null,否则您将获得NPE。