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 以“ftp://”而不是“file:”开头

但是我似乎无法弄清楚我应该怎么做!

也许有更好的方法来解决这个问题?

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();
...

考虑作为Apache Commons NetFTPClient的替代方案,它支持许多协议。这是一个FTP 列表文件示例

于 2013-01-22T20:14:42.197 回答
3

如果您将 URI 与文件一起使用,您可以使用您的代码但是,但是当您想使用 ftp 时,您需要这种代码;code 列出你的 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();
    }
}

EDITED Demo 代码属于 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 回答