Как я могу проверить, существует ли файл на FTP-сервере? - PullRequest
2 голосов
/ 14 сентября 2011

Я использую apache FTPClient на Android.Я хочу скачать файл с FTP-сервера.Но я хочу проверить, существует ли он на сервере перед загрузкой.Как я могу это проверить?

Спасибо,

мой код:

public static boolean getFile(String serverName, String userName,
        String password, String serverFilePath, String localFilePath)
        throws Exception {

    FTPClient ftp = new FTPClient();
    try {
        ftp.connect(serverName);
        int reply = ftp.getReplyCode();

        if (!FTPReply.isPositiveCompletion(reply)) {
            ftp.disconnect();
            return false;
        }
    } catch (IOException e) {
        if (ftp.isConnected()) {
            try {
                ftp.disconnect();
            } catch (IOException f) {
                throw e;
            }
        }
        throw e;
    } catch (Exception e) {
        throw e;
    }

    try {
        if (!ftp.login(userName, password)) {
            ftp.logout();
        }           
        ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
        ftp.enterLocalPassiveMode();

        OutputStream output;

        output = new FileOutputStream(localFilePath);           
        ftp.retrieveFile(serverFilePath, output);
        output.close();

        ftp.noop(); // check that control connection is working OK
        ftp.logout();
        return true;

    } catch (FTPConnectionClosedException e) {
        throw e;
    } catch (IOException e) {
        throw e;
    } catch (Exception e) {
        throw e;
    } finally {
        if (ftp.isConnected()) {
            try {
                ftp.disconnect();
            } catch (IOException f) {
                throw f;
            }
        }

    }

}

Ответы [ 4 ]

3 голосов
/ 13 июня 2012
String[] files = ftp.listnames();

смотреть файлы, если желаемое имя файла включает ...

2 голосов
/ 15 июня 2015

Предполагая, что ftpClient является экземпляром org.apache.commons.net.ftp.FTPClient:

public boolean fileExists(String fileName) throws IOException
{
    String[] files = ftpClient.listNames();

    return Arrays.asList(files).contains(fileName);
}
0 голосов
/ 28 ноября 2014
InputStream inputStream = ftpClient.retrieveFileStream(filePath);
 if (inputStream == null || ftpClient.getReplyCode() == 550) {
// it means that file doesn't exist.
}


or

FTPFile[] mFileArray = ftp.listFiles();
// you can check if array contains needed file
0 голосов
/ 14 сентября 2011

Когда клиент отправляет RETR, а сервер отвечает кодом ошибки 550, вы можете быть уверены, что файл не существует или у вас нет разрешения на его извлечение ...может просто принять любую ошибку в диапазоне 550 - 559, которая указывает на постоянную ошибку файловой системы.

...