2010-04-26 20 views
32

Czy ktoś może mi wyjaśnić, co jest nie tak z następującym kodem? Próbowałem różnych hostów, FTPClientConfigs, jest właściwie dostępny przez firefox/filezilla ... Problem polega na tym, że zawsze otrzymuję pustą listę plików bez żadnych wyjątków (files.length == 0). Używam commons-net-2.1.jar zainstalowanego z Mavenem.Apache Commons Net FTPClient i 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

Każdy komunikat o błędzie? Nie jestem pewien, jaki masz problem! – Guillaume

+0

Problem polega na tym, że zawsze otrzymuję pustą listę plików bez żadnych wyjątków (files.length == 0). Pytanie zostało zaktualizowane. –

+0

Działa to dobrze na moim serwerze FTP, z tym że nie wywołuję client.configure (...) – Guillaume

Odpowiedz

75

Found it!

Rzecz chcesz wejść w tryb pasywny po podłączeniu, ale zanim się zalogować. Kod zwraca nic dla mnie, ale to działa na mnie:

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

Daje mi to wyjście:

 
c128 
c64 
c64.hu 
incoming 
plus4 
+0

Dzięki. Rozwiązałem ten problem, używając innej biblioteki. –

+1

(Odnośnie komentarza BTW: 'Assert.assertTrue' pochodzi z JUnit lub TestNG, Java's asercja byłaby po prostu" assert ". W każdym razie myślę, że chodziło tylko o zilustrowanie pożądanego wyniku dla czytelników pytania.) – Jonik

+0

@ Jonik Oh , Zgadza się. Nie zwracałem uwagi. Usunąłem ten bit. – PapaFreud

3

zwykle annonymous użytkownik nie potrzebuje hasła, spróbuj

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

tylko przy enterLocalPassiveMode() nie działa dla mnie.

Użyłem następującego kodu, który działał.

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

Kompletna przykładem jest jak poniżej,

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

Nie można znaleźć metod: ftpClient.execPBSZ (0); ftpClient.execPROT ("P") – user3871754

+0

Używasz FTPClient lub FTPSClient? Te metody istnieją tylko w FTPSClient. –

Powiązane problemy