Quelqu'un peut-il m'expliquer ce qui ne va pas avec le code suivant? J'ai essayé différents hôtes, FTPClientConfigs, il est correctement accessible via firefox/filezilla ... Le problème est que je reçois toujours une liste de fichiers vide sans aucune exception (files.length == 0). J'utilise commons-net-2.1.jar installé avec 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);
Je l'ai trouvé!
La chose est que vous voulez entrer en mode passif après vous être connecté, mais avant de vous connecter . Votre code ne renvoie rien pour moi, mais cela fonctionne pour moi:
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());
}
}
}
Me donne cette sortie:
c128 c64 c64.hu entrant plus4
Seule l'utilisation de enterLocalPassiveMode()
n'a pas fonctionné pour moi.
J'ai utilisé le code suivant, qui a fonctionné.
ftpsClient.execPBSZ(0);
ftpsClient.execPROT("P");
ftpsClient.type(FTP.BINARY_FILE_TYPE);
L'exemple complet est comme ci-dessous,
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());
}
généralement, l'utilisateur anonyme n'a pas besoin de mot de passe, essayez
client.login("anonymous", "");