使用Apache Commons和Java FTP下载后,Word文档将不会打开

问题描述 投票:2回答:2

我遵循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服务器上,它看起来像这样

How the Filenames Should Look

当我通过Java保存它们(我尝试过的任何一种方法)时,它们在要删除的文件名中都有奇怪的字符:

Local File Names With Odd Characters

关于这些问题中的任何一个的任何建议都将不胜感激。谢谢您的帮助。

java ftp
2个回答
0
投票

应该是

client.setFileType(FTP.BINARY_FILE_TYPE);

client.setFileStructure(FTP.BINARY_FILE_TYPE);  

0
投票

用于固定奇怪的文件名:

client.setControlEncoding("UTF-8");
© www.soinside.com 2019 - 2024. All rights reserved.