如何检查 FTP 服务器上是不是存在文件?

Posted

技术标签:

【中文标题】如何检查 FTP 服务器上是不是存在文件?【英文标题】:How can I check if a file exists on FTP server?如何检查 FTP 服务器上是否存在文件? 【发布时间】:2011-11-16 22:33:30 【问题描述】:

我在 android 上使用 apache FTPClient。我想从 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;
            
        

    


【问题讨论】:

【参考方案1】:
String[] files = ftp.listnames();

如果需要的文件名是包含,请查看文件...

【讨论】:

【参考方案2】:

假设ftpClientorg.apache.commons.net.ftp.FTPClient 的一个实例:

public boolean fileExists(String fileName) throws IOException

    String[] files = ftpClient.listNames();

    return Arrays.asList(files).contains(fileName);

【讨论】:

【参考方案3】:

当客户端发送 RETR 并且服务器以错误代码 550 响应时,您可以非常确定该文件不存在或者您没有获取它的权限...由于 FTP 规范有点松散,您可能只是假设 550 - 559 范围内的任何错误都表示永久文件系统错误。

【讨论】:

【参考方案4】:
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

【讨论】:

必须添加 completePendingCommand() 以防止以下 FTP 命令出现问题。

以上是关于如何检查 FTP 服务器上是不是存在文件?的主要内容,如果未能解决你的问题,请参考以下文章

cmd dos 检查远程FTP文件夹是不是存在

检查 FTPS 上是不是存在文件,错误 550

ftp上传错误,提示:打开FTP服务器上的文件夹时发生错误,请检查是不是有权限访问该文件夹。

如何检查服务器上是不是存在任何pdf文件?

删除FTP服务器上的文件或者文件夹时发生错误,请检查是不是有权限访问该文件夹!我能上传,但不能删除

上传时提示:将文件复制到ftp服务器出错,请检查是不是有权限将文件放到该服务器上。