所以,我有一堆内部文件夹和文件的这个FTP服务器。
我的程序需要访问此服务器,读取所有文件,并显示它们的数据。
为发展宗旨,我一直与我的文件在硬盘上,就在“源”文件夹中。
但现在,服务器启动并运行,我需要的软件连接到它。
基本上我想要做的是在服务器上的特定文件夹获取文件的列表。
这是我到目前为止有:
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方案不是‘文件’。”
我明白这是因为我的网址开头是“FTP://”,而不是“文件:”
不过,我似乎无法找出什么我应该怎么办呢!
也许有一个更好的方式去这件事吗?
File
对象不能处理的FTP
连接,你需要使用URLConnection
:
URL url = new URL ("ftp://username:password@www.superland.example/server");
URLConnection urlc = url.openConnection();
InputStream is = urlc.getInputStream();
...
考虑作为替代FTPClient
从阿帕奇百科全书网拥有许多协议的支持。 下面是一个FTP列表文件例子 。
如果你使用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();
}
}
EDITED 演示代码属于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();
}
}
}