web-dev-qa-db-ja.com

Apache Commons Net FTPClientおよびlistFiles()

誰かが次のコードの何が問題になっているのか説明できますか?私は別のホスト、FTPClientConfigsを試しましたが、firefox/filezillaを介して適切にアクセスできます...問題は、例外なしに常に空のファイルリストを取得することです(files.length == 0)。 Mavenと共にインストールされるcommons-net-2.1.jarを使用します。

    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);
36

それを見つけた!

接続した後、ログインする前にパッシブモードに入りたいにしたいということです。あなたのコードは私には何も返しませんが、これは私にとってはうまくいきます:

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 
着信
 plus4 
90
PapaFreud

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

通常、匿名ユーザーはパスワードを必要としません。

client.login("anonymous", "");
3
Gelvis