2010-04-26 20 views
32

¿Alguien puede explicarme qué ocurre 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.Apache Commons Net FTPClient y listFiles()

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); 
+0

Cualquier mensaje de error? ¡No estoy seguro de cuál es tu problema! – Guillaume

+0

El problema es que siempre obtengo una lista de archivos vacía sin excepciones (files.length == 0). La pregunta se actualiza. –

+0

Funciona bien en mi servidor FTP, excepto que no llamo client.configure (...) – Guillaume

Respuesta

75

encontrado!

Lo que pasa es que desea entrar en el modo pasivo después de conectar, pero antes de que inicie la sesión. Su 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 este resultado:

 
c128 
c64 
c64.hu 
incoming 
plus4 
+0

Gracias. Resolví este problema usando otra lib. –

+1

(En cuanto al comentario BTW: 'Assert.assertTrue' es de JUnit o TestNG; la afirmación de Java sería simplemente' assert'. De todos modos, creo que el punto fue solo para ilustrar el resultado deseado para los lectores de la pregunta.) – Jonik

+0

@Jonik Oh , está bien. No estaba prestando atención. Yo eliminé ese bit. – PapaFreud

3

por lo general el usuario annonymous no necesita una contraseña, intente

client.login("anonymous", ""); 
2

sólo con enterLocalPassiveMode() no funcionó para mí.

Utilicé el siguiente código, que funcionó.

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

Ejemplo completo es como abajo,

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()); 
    } 
+0

No se encuentran los métodos: ftpClient.execPBSZ (0); ftpClient.execPROT ("P") – user3871754

+0

¿Está utilizando FTPClient o FTPSClient? Esos métodos solo existen en FTPSClient. –

Cuestiones relacionadas