我正在尝试将文件(config.zip.zip和artikels.csv)从我的Java应用程序传输到程序运行的FTP服务器,文件被传输,但是当我在文件夹中打开它时,文件已损坏,文件大小小于原始文件大小。 artikels.csv文件有较少的行然后orignal artikels.csv但zip文件不能完全打开。为什么?我该如何解决这个问题?
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
public static void upload(List<String> files){
FTPClient client = new FTPClient();
FileInputStream fis = null;
try {
client.connect(ftpServer);
client.login(username, password);
client.setFileType(FTP.BINARY_FILE_TYPE);
for(String filename:files){
fis = new FileInputStream(filename);
boolean uploadOk = client.storeFile(FilenameUtils.getName(filename), fis);
System.out.println("Uploading status is: "+uploadOk);
}
client.completePendingCommand();
client.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
client.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
这是您正在运行的确切代码吗?似乎怀疑completePending Command()和logout()在你的文件迭代循环中。你不应该有更像以下的东西吗?
...
client.connect(ftpServer);
client.login(username, password);
client.setFileType(FTP.BINARY_FILE_TYPE);
for(String filename:files){
fis = new FileInputStream(filename);
String s = FilenameUtils.getName(filename);
System.out.println(s);
boolean uploadOk = client.storeFile(s, fis);
System.out.println("Uploading status is: "+uploadOk);
}
client.completePendingCommand();
client.logout();
...
答案 1 :(得分:0)
您需要在循环中添加fis.close()
。
由于您要遍历许多文件,因此需要在每个文件之后关闭FileInputStream
。