2010-04-26 172 views
32

任何人都可以解釋我下面的代碼有什麼問題嗎?我嘗試了不同的主機,FTPClientConfigs,它可以通過firefox/filezilla正常訪問......問題是我總是得到空文件列表沒有任何異常(files.length == 0)。我使用與Maven一起安裝的commons-net-2.1.jar。Apache Commons Net FTPClient和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

任何錯誤訊息?不知道你的問題是什麼! – Guillaume 2010-04-26 11:24:39

+0

問題是我總是得到空文件列表沒有任何例外(files.length == 0)。問題已更新。 – 2010-04-26 11:31:25

+0

它在我的FTP服務器上正常工作,除了我不呼叫client.configure(...) – Guillaume 2010-04-26 11:40:43

回答

75

找到了!

你想要的東西連接後進入被動模式,但是在你登錄之前進入。 你的代碼返回沒有我的,但是這對我的作品:

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

給了我這樣的輸出:

 
c128 
c64 
c64.hu 
incoming 
plus4 
+0

謝謝。我用另一個lib解決了這個問題。 – 2011-03-03 18:44:44

+1

(關於BTW評論:'Assert.assertTrue'來自JUnit或TestNG; Java的斷言只是'assert'。無論如何,我想這一點只是爲了說明問題讀者所期望的結果。) – Jonik 2013-04-15 12:26:22

+0

@Jonik Oh , 那就對了。我沒有注意。我刪除了那一點。 – PapaFreud 2013-04-19 07:54:44

3

通常annonymous用戶不需要輸入密碼,嘗試

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

只能用enterLocalPassiveMode()並沒有爲我工作。

我用下面的代碼,它的工作。

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

完整示例是如下,

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

找不到方法:ftpClient.execPBSZ(0); ftpClient.execPROT(「P」) – user3871754 2017-06-30 05:57:15

+0

您是使用FTPClient還是FTPSClient?這些方法只存在於FTPSClient中。 – 2017-06-30 18:24:23

相關問題