代码之家  ›  专栏  ›  技术社区  ›  Shyam Kumar Sundarakumar

Apache Commons FTPClient.listFiles

  •  19
  • Shyam Kumar Sundarakumar  · 技术社区  · 16 年前

    我正在使用 org.apache.commons.net.ftp.FTPClient connect , login , pwd cwd . 然而,当我试图 list 文件它不会返回该目录中的文件列表,我确信在该目录中存在文件。我正在使用这个方法 FTPFile[] listFiles() FTPFile

    请在下面找到我尝试此操作的代码段:

            String hostname = properties.getProperty("FTP_SERVER");
            String user = properties.getProperty("FTP_USER");
            String passwd = properties.getProperty("FTP_PASSWD");
            FTPClient client = new FTPClient();
            client.connect(hostname);
            client.login(user, passwd);
            String reply = client.getStatus();
            System.out.println(reply);
            client.enterRemotePassiveMode();
            client.changeWorkingDirectory("/uploads");
            FTPFile[] files = client.listFiles();
            System.out.println(files.length);
            for (FTPFile file : files) {
                System.out.println(file.getName());
            }
    
            String[] fileNames = client.listNames();
            if (fileNames != null) {
                for (String file : fileNames) {
                    System.out.println(file);
                }
            }
            client.disconnect();
    
    6 回复  |  直到 16 年前
        1
  •  18
  •   Community Mohan Dere    9 年前

    这似乎是我遇到(并解决)的同一个问题,请参见以下答案:

    Apache Commons Net FTPClient and listFiles()

        2
  •  6
  •   Shyam Kumar Sundarakumar    16 年前

    在我将模式设置为 PASV 它现在工作得很好! 谢谢你的努力和建议!

        3
  •  2
  •   Kamil Nękanowicz    9 年前

    我补充说 client.enterLocalPassiveMode()

    client.connect("xxx.com");
    boolean login = client.login("xxx", "xxx");
    client.enterLocalPassiveMode();
    
        4
  •  1
  •   Paul    16 年前

    只是一个愚蠢的建议。。。您可以使用普通的FTP客户端在/uploads文件夹中列出一个列表吗。我这样问是因为一些FTP服务器设置为不显示上载文件夹的列表。

        5
  •  1
  •   Matthew Flaschen    16 年前

    首先,确保列表在其他程序中有效。如果是这样,一种可能是没有正确解析文件列表。您可以尝试显式指定要与一起使用的解析器 initiateListParsing

        6
  •  1
  •   Lisa    12 年前

    我也遇到了同样的问题,结果是它无法解析服务器返回的文件列表。在连接到ftp服务器ftpClient.setParserFactory(新的MyFTPFileEntryParserFactory())后,我使用这一行;

    public class MyFTPFileEntryParserFactory implements FTPFileEntryParserFactory {
    private final static FTPFileEntryParser parser = new UnixFTPEntryParser() {
        @Override public FTPFile parseFTPEntry(String entry) {
            FTPFile ftpFile = new FTPFile();
            ftpFile.setTimestamp(getCalendar(entry));
            ftpFile.setSize(get(entry));
            ftpFile.setName(getName(entry));
            return ftpFile;
        }
    };
    
    @Override public FTPFileEntryParser createFileEntryParser(FTPClientConfig config) throws ParserInitializationException {
        return parser;
    }
    
    @Override public FTPFileEntryParser createFileEntryParser(String key) throws ParserInitializationException {
        return parser;
    }
    

    }

        7
  •  1
  •   heinels    6 年前

    就我而言,除了申请 肠局部被动素 指示正确的操作系统,我还需要设置 无法解析的条目 设置为true以使listFile方法工作。

    FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX);
    conf.setUnparseableEntries(true);
    f.configure(conf);
    boolean isLoginSuccess = client.login(username, password);