我遵循Apache教程,使用Java从FTP下载文档。我尝试了两种方法,并且它们都下载文件,并且如果我使用Filezilla检查文件,则文件大小据报告与在FTP客户端中看到的大小相同。但是,当我在本地磁盘上获取文件然后去打开它们时,Word引发错误并询问我是否要恢复文档。即使恢复确实有效,我也需要首先正确下载文件。有人可以阐明为什么会这样吗?
这里是来源:
private void downloadAllFiles() throws IOException{
client.enterLocalPassiveMode();
client.changeWorkingDirectory(ftpDirectory);
client.setFileStructure(FTP.BINARY_FILE_TYPE);
FTPFile[] files = client.listFiles();
for(FTPFile f : files) {
if(f.isFile())
downloadFile(f);
}
}
private void downloadFile(FTPFile ftpFile) throws IOException{
File saveLocation = new File(fileStorageDir);
if(!saveLocation.exists())
saveLocation.mkdirs();
File downloadFile = new File(fileStorageDir + "\\" + ftpFile.getName());
OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(downloadFile));
InputStream inputStream = client.retrieveFileStream(ftpFile.getName());
byte[] bytesArray = new byte[4096];
int bytesRead = -1;
while((bytesRead = inputStream.read(bytesArray)) !=-1) {
outputStream.write(bytesArray, 0, bytesRead);
}
boolean success = client.completePendingCommand();
if (success) {
System.out.println("File has been downloaded successfully.");
}
outputStream.close();
inputStream.close();
}
文件名中也有奇数字符。在FTP服务器上,它看起来像这样
当我通过Java保存它们(我尝试过的任何一种方法)时,它们在要删除的文件名中都有奇怪的字符:
Local File Names With Odd Characters
关于这些问题中的任何一个的任何建议都将不胜感激。谢谢您的帮助。
应该是
client.setFileType(FTP.BINARY_FILE_TYPE);
不
client.setFileStructure(FTP.BINARY_FILE_TYPE);
用于固定奇怪的文件名:
client.setControlEncoding("UTF-8");