Apache Commons Net FTPClient e listFiles()

Alguém me pode explicar o que se passa com o seguinte código? Eu tentei diferentes hospedeiros, FTPClientConfigs, é adequadamente acessível via firefox / filezilla... O problema é que eu sempre fico vazia filelist sem quaisquer exceções (arquivos.comprimento = = 0). Eu uso o commons-net-2.1.jar instalado com Maven.

    FTPClientConfig config = new FTPClientConfig(FTPClientConfig.SYST_L8);

    FTPClient client = new FTPClient();
    client.configure(config);

    client.connect("c64.rulez.org");
    client.login("anonymous", "anonymous");
    client.enterRemotePassiveMode();

    FTPFile[] files = client.listFiles();
    Assert.assertTrue(files.length > 0);
Author: centic, 2010-04-26

3 answers

Encontrei! O que se passa é que queres ... indique o modo passivo após a ligação, mas antes de se ligar. O teu código não devolve nada para mim, mas isto funciona para mim.
import org.apache.commons.net.ftp.FTPClient;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPFile;

public class BasicFTP {

    public static void main(String[] args) throws IOException {
        FTPClient client = new FTPClient();
        client.connect("c64.rulez.org");
        client.enterLocalPassiveMode();
        client.login("anonymous", "");
        FTPFile[] files = client.listFiles("/pub");
        for (FTPFile file : files) {
            System.out.println(file.getName());
        }
    }
}

Dá - me esta saída:

c128
c64
c64.hu
incoming
plus4
 81
Author: PapaFreud, 2014-09-02 21:45:04

Só o uso de enterLocalPassiveMode() não funcionou para mim.

Usei o código que funcionou.

    ftpsClient.execPBSZ(0);
    ftpsClient.execPROT("P");
    ftpsClient.type(FTP.BINARY_FILE_TYPE);

O exemplo completo é o seguinte:

    FTPSClient ftpsClient = new FTPSClient();        

    ftpsClient.connect("Host", 21);

    ftpsClient.login("user", "pass");

    ftpsClient.enterLocalPassiveMode();

    ftpsClient.execPBSZ(0);
    ftpsClient.execPROT("P");
    ftpsClient.type(FTP.BINARY_FILE_TYPE);

    FTPFile[] files = ftpsClient.listFiles();

    for (FTPFile file : files) {
        System.out.println(file.getName());
    }
 5
Author: Suketu Patel, 2017-06-30 19:05:59

Normalmente o utilizador não precisa de uma senha, tente

client.login("anonymous", "");
 3
Author: Gelvis, 2014-05-30 19:03:57