java - example - Apache Commons Net FTPClient y listFiles()
ftpclient listfiles (3)
¡Lo encontré!
Lo que desea es ingresar al modo pasivo después de conectarse, pero antes de iniciar sesión . Tu código no devuelve nada para mí, pero esto funciona para mí:
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 da esta salida:
c128 c64 c64.hu incoming plus4
¿Alguien puede explicarme qué pasa con el siguiente código? Probé con diferentes hosts, FTPClientConfigs, es accesible desde Firefox / FileZilla ... El problema es que siempre obtengo una lista de archivos vacía sin excepciones (files.length == 0). Yo uso commons-net-2.1.jar instalado con 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);
Solo el uso de enterLocalPassiveMode()
no funcionó para mí.
Usé el siguiente código, que funcionó.
ftpsClient.execPBSZ(0);
ftpsClient.execPROT("P");
ftpsClient.type(FTP.BINARY_FILE_TYPE);
El ejemplo completo es el siguiente,
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());
}
generalmente el usuario anónimo no necesita una contraseña, prueba
client.login("anonymous", "");