2010-04-26 5 views
32

Qualcuno può spiegarmi cosa c'è che non va nel seguente codice? Ho provato diversi host, FTPClientConfigs, è correttamente accessibile tramite firefox/filezilla ... Il problema è che ottengo sempre filelist vuota senza eccezioni (files.length == 0). Io uso commons-net-2.1.jar installato con Maven.Apache Commons Net FTPClient e 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

Qualsiasi messaggio di errore? Non sei sicuro di quale sia il tuo problema! – Guillaume

+0

Il problema è che ottengo sempre liste file vuote senza eccezioni (files.length == 0). La domanda è aggiornata. –

+0

Funziona correttamente sul mio server FTP, tranne che non chiamo client.configure (...) – Guillaume

risposta

75

trovato!

La cosa è che si desidera accedere alla modalità passiva dopo la connessione, ma prima di accedere. tuo codice restituisce nulla per me, ma questo funziona per me:

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

mi dà questo output:

 
c128 
c64 
c64.hu 
incoming 
plus4 
+0

Grazie. Ho risolto questo problema usando un'altra lib. –

+1

(Riguardo al commento di BTW: "Assert.assertTrue' è di JUnit o TestNG; l'assert di Java sarebbe semplicemente" assert ". Comunque, immagino che il punto fosse solo per illustrare il risultato desiderato ai lettori della domanda.) – Jonik

+0

@Jonik Oh , giusto. Non stavo prestando attenzione. Ho rimosso quel pezzetto. – PapaFreud

3

di solito l'utente annonymous non ha bisogno di una password, provare

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

solo con enterLocalPassiveMode() non ha funzionato per me.

Ho usato il seguente codice, che ha funzionato.

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

esempio completo è come sotto,

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

Impossibile trovare i metodi: ftpClient.execPBSZ (0); ftpClient.execPROT ("P") – user3871754

+0

Si sta utilizzando FTPClient o FTPSClient? Questi metodi esistono solo in FTPSClient. –