Domanda

org.apache.commons.net.ftp.FTPClient in una delle mie applicazioni di lavorare con un server FTP. Sono in grado di connect, login, pwd e cwd. Tuttavia, quando cerco di list i file che non restituisce l'elenco dei file in tale directory, dove so per certo che ci sono file. Sto usando il metodo FTPFile[] listFiles() , restituisce un array vuoto di FTPFile.

Di seguito riportiamo il frammento di codice in cui sto provando in questo modo:

        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();
È stato utile?

Soluzione

Questo mi sembra lo stesso problema che ho avuto (e risolto), vedi questa risposta:

Apache Commons Net FTPClient e ListFiles ()

Altri suggerimenti

Dopo aver impostato la modalità come PASV si sta lavorando bene ora! Grazie per tutti i vostri sforzi e suggerimenti!

Solo un suggerimento stupido ... si può fare un profilo su i / uploads cartella utilizzando un normale client FTP. Lo chiedo perché alcuni server FTP sono configurati per non visualizzare l'elenco di una cartella di caricamento.

Per prima cosa, assicurarsi che le opere di quotazione in altri programmi. Se è così, una possibilità è che l'elenco dei file non viene analizzato correttamente. Si può provare in modo esplicito specificando il parser da usare con initiateListParsing .

ho dovuto stesso problema e si è rivelato essere il fatto che non in grado di analizzare ciò che il server stava tornando per un elenco di file. Ho questa linea dopo la connessione al server ftp ftpClient.setParserFactory (nuova 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;
}

}

ho aggiunto client.enterLocalPassiveMode() e funziona:

client.connect("xxx.com");
boolean login = client.login("xxx", "xxx");
client.enterLocalPassiveMode();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top