簡體   English   中英

Apache Commons FTPClient無法檢索某些文件

[英]Apache Commons FTPClient fails to retrieve some files

我正在使用Apache Commons FTPClient從FTP服務器獲取文件。 這是設置:

 ftpClient.setDefaultPort(port);
            ftpClient.connect(server);
            ftpClient.login(user, password);
            ftpClient.enterLocalPassiveMode();
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftpClient.changeWorkingDirectory(path);

這是轉移代碼:

final FileOutputStream fileOutputStream = new FileOutputStream(tempFile);
                    final boolean result = ftpClient.retrieveFile(dirToList + aFile.getName(), fileOutputStream);
                    Log.i(TAG, "[" + (result ? "+" : "-") + "]");

我在日志中看到的內容:

I/SyncService( 4412): /Users/user1/Downloads/FtpSync/.idea/copyrightprofiles_settings.xml
I/SyncService( 4412): [-]
<...>
I/SyncService( 4412): /Users/user1/Downloads/FtpSync/footer.php
I/SyncService( 4412): [+]

所有php文件都已同步,並且所有xml文件都無法同步。 FTP服務器在我的本地筆記本上(Mac OS X默認ftp服務器,tnftpd 20100324 + GSSAPI)

為什么它不起作用?

首先,您應該始終在retrieveFile方法之后關閉輸出流。 您是否嘗試在下載XML文件時更改FTP。{filetype}(雖然不一定如此)?

我在使用retrieveFile方法下載一些大文件時遇到了麻煩,它會在不拋出異常的情況下崩潰。 最后我使用了retrieveFileStream方法,它為我解決了這個問題。

更換

status = mFTPClient.retrieveFile(srcFilePath, desFileStream);

// import org.apache.commons.io.IOUtils;

InputStream inputStream = mFTPClient.retrieveFileStream(srcFilePath);
IOUtils.copy(inputStream, desFileStream);
outputStream.flush();
IOUtils.closeQuietly(desFileStream);
IOUtils.closeQuietly(inputStream);

//status = mFTPClient.completePendingCommand();
status = true;

completePendingCommand崩潰而沒有為我拋出異常,因此它被注釋掉了,但我認為應該在完成一個命令后調用它。

使用此代碼下載文件。

public boolean ftpDownload(String srcFilePath, String desFilePath)
    {
        boolean status = false;
        try {
            FileOutputStream desFileStream = new FileOutputStream(desFilePath);; //desfilepath where the file is to be stored
            status = mFTPClient.retrieveFile(srcFilePath, desFileStream);

            desFileStream.close();

            return status;
        } catch (Exception e) {
            Log.d(TAG, "download failed");
        }

        return status;
    } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM