11

だから私はこのFTPサーバーを持っており、その中にたくさんのフォルダーとファイルがあります。

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

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

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

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

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

URL url = null;
File folder = null;
try {
    url = new URL ("ftp://username:password@www.superland.example/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://」で始まるためだと理解しています。

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

多分これについてもっと良い方法がありますか?

4

2 に答える 2

12

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

URL url = new URL ("ftp://username:password@www.superland.example/server");
URLConnection urlc = url.openConnection();
InputStream is = urlc.getInputStream();
...

多くのプロトコルをサポートしているFTPClientApache Commons Netの代替として検討してください。以下はFTP リスト ファイルの例です。

于 2013-01-22T20:14:42.197 に答える
3

ファイルで 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:password@www.superland.example/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();
        }
    }
}
于 2013-01-22T20:20:52.037 に答える