2010-04-26 4 views
32

Может ли кто-нибудь объяснить мне, что случилось со следующим кодом? Я пробовал разные хосты, FTPClientConfigs, он правильно доступен через firefox/filezilla ... Проблема в том, что я всегда получаю пустой список файлов без каких-либо исключений (files.length == 0). Я использую commons-net-2.1.jar, установленный с Maven.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

+0

Проблема в том, что я всегда получаю пустой список файлов без каких-либо исключений (files.length == 0). Вопрос обновляется. –

+0

Он отлично работает на моем FTP-сервере, за исключением того, что я не вызываю client.configure (...) – Guillaume

ответ

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. –

+1

(Что касается комментария BTW: 'Assert.assertTrue' от JUnit или TestNG, утверждение Java просто будет' assert'. Во всяком случае, я думаю, это было просто для иллюстрации желаемого результата для читателей вопроса.) – Jonik

+0

@Jonik Oh , это верно. Я не обращал внимания. Я удалил этот бит. – PapaFreud

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

+0

Используете ли вы FTPClient или FTPSClient? Эти методы существуют только в FTPSClient. –

Смежные вопросы