8
URL url =  new URL("ftp://user:pass@ftp.example.com/thefolder/");
URLConnection connection = url.openConnection();
...
// List files in folder...

上記のようなものを使用して、フォルダー「thefolder」内のファイルのリストを取得する方法を知りたいと思っていましたか?


この元の質問に続いて、すべて機能していて見栄えの良いこの単純な FTP 接続をまとめました。/live/conf/ の場所にあるすべてのファイルを表示でき、それらすべてをローカルの /conf/ の場所にコピーします。

唯一の問題は、ファイルをコピーしているがコンテンツがないことです。それらはすべて 0KB で空です。

ファイルの内容ではなく、ファイル名をコピーしている明らかなものを誰でも見ることができますか?

try {
    FTPClient ftp = new FTPClient();
    ftp.connect("000.000.000.000");
    ftp.login("USER", "PASSWORD");
    ftp.enterLocalPassiveMode();
    ftp.setFileType(FTP.BINARY_FILE_TYPE);

    FTPFile[] files = ftp.listFiles("/live/conf/");
    for (int i=0; i < files.length; i++) {
        if (files[i].getName().contains(".csv")) {

            String remoteFile1 = files[i].getName();
            File downloadFile1 = new File("/var/local/import/conf/"+files[i].getName());
            OutputStream outputStream1 = new BufferedOutputStream(new FileOutputStream(downloadFile1));
            ftp.retrieveFile(remoteFile1, outputStream1);
            outputStream1.close();                  

        }
    }
    ftp.disconnect();
} catch (SocketException ex) {
    ex.printStackTrace();
} catch (IOException ex) {
    ex.printStackTrace();
}   
4

3 に答える 3

9

Java SEURLConnectionは、FTP ホストからファイルのリストを取得するジョブには適していません。FTP に関しては、基本的に FTPgetまたはputコマンド (ファイルの取得またはアップロード) のみをサポートします。ls基本的に探している FTP コマンド (リスト ファイル) はサポートされていません。

FTPlsコマンド (およびその他多数) をサポートするサード パーティのライブラリを探す必要があります。一般的に使用されるのはApache Commons Net FtpClientです。そのjavadocには、次の発行方法が示されていますls

FTPClient f = new FTPClient();
f.connect(server);
f.login(username, password);
FTPFile[] files = f.listFiles(directory);
于 2013-01-07T16:46:29.207 に答える
5

Apache commons FTPClientを使用できます

これにより、listFiles を呼び出すことができます...

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());
        }
于 2013-01-07T16:45:48.660 に答える
2

私が見つけたこのクラスをチェックしてください。それはあなたのために持ち上げます。 nsftools.com のクラス

例は次のとおりです。

FTPConnection ftpConnect = new FTPConnection();
ftpConnect.connect("ftp.example.com");
ftpConnect.login("user","pass");

System.out.println(ftpConnect.listFiles());
于 2013-01-07T16:42:39.307 に答える