web-dev-qa-db-ja.com

Java:FTPサーバーからファイルにアクセスする

だから私は内部にたくさんのフォルダとファイルを持つこのFTPサーバーを持っています。

私のプログラムは、このサーバーにアクセスし、すべてのファイルを読み取り、それらのデータを表示する必要があります。

開発の目的で、私はハードドライブの「src」フォルダにあるファイルを操作してきました。

しかし、サーバーが稼働しているので、ソフトウェアをサーバーに接続する必要があります。

基本的に私がやりたいことは、サーバー上の特定のフォルダーにあるファイルのリストを取得することです。

これは私がこれまでに持っているものです:

URL url = null;
File folder = null;
try {
    url = new URL ("ftp://username:[email protected]/server");
    folder = new File (url.toURI());
} catch (Exception e) {
    e.printStackTrace();
}
data = Arrays.asList(folder.listFiles(new FileFilter () {
    public boolean accept(File file) {
        return file.isDirectory();
    }
}));

しかし、「URIスキームは「ファイル」ではありません」というエラーが表示されます。

これは、私のURLが「file:」ではなく「ftp://」で始まるためだと理解しています。

しかし、私はそれについて何をすべきかを理解することができないようです!

たぶんこれについてより良い方法がありますか?

10
Rich Young

FileオブジェクトはFTP接続を処理できません。URLConnectionを使用する必要があります:

URL url = new URL ("ftp://username:[email protected]/server");
URLConnection urlc = url.openConnection();
InputStream is = urlc.getInputStream();
...

代替として、多くのプロトコルをサポートする Apache Commons NetFTPClientを検討してください。これが FTPリストファイルの例 です。

12
Reimeus

ファイルでURIを使用する場合はコードを使用できますが、ftpを使用する場合はこの種類のコードが必要です。コードはあなたのftpサーバーの下のファイルの名前をリストします

import Java.net.*;
import Java.io.*;

public class URLConnectionReader {
    public static void main(String[] args) throws Exception {
        URL url = new URL("ftp://username:[email protected]/server");
        URLConnection con = url.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                                    con.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) 
            System.out.println(inputLine);
        in.close();
    }
}

[〜#〜]編集済み[〜#〜]デモコードはCodejavaに属する

package net.codejava.ftp;

import Java.io.BufferedReader;
import Java.io.IOException;
import Java.io.InputStream;
import Java.io.InputStreamReader;
import Java.net.URL;
import Java.net.URLConnection;

public class FtpUrlListing {

    public static void main(String[] args) {
        String ftpUrl = "ftp://%s:%s@%s/%s;type=d";
        String Host = "www.myserver.com";
        String user = "tom";
        String pass = "secret";
        String dirPath = "/projects/Java";

        ftpUrl = String.format(ftpUrl, user, pass, Host, dirPath);
        System.out.println("URL: " + ftpUrl);

        try {
            URL url = new URL(ftpUrl);
            URLConnection conn = url.openConnection();
            InputStream inputStream = conn.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

            String line = null;
            System.out.println("--- START ---");
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            System.out.println("--- END ---");

            inputStream.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
3
erhun