如何在Java中将FTP文件列表转换为文件列表?

时间:2018-02-28 07:34:57

标签: java file ftp apache-commons ftp-client

我有一个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())中生成 请帮忙。

2 个答案:

答案 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。