2013-01-22 155 views
6

所以我有这个FTP服务器里面有一堆文件夹和文件。Java:从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方案不是‘文件’。”

我明白了,这是因为我的网址开头是“FTP://”,而不是“文件:”

不过,我似乎无法找出什么我应该怎么办呢!

也许有更好的方法去做这件事?

+0

为什么你认为'File'构造函数处理比一个'文件以外的任何其他:'网址是什么? – parsifal

+0

这个问题已经被多次询问过了;也许其他答案之一会帮助你:http://stackoverflow.com/search?q=[java]+Accessing+a+File+from+an+FTP+Server – parsifal

+0

你想成为有用的,或玩世不恭吗? 我很希望。问题是我需要一个文件列表。 我不知道任何其他方式去做这件事。 –

回答

7

File对象不能处理的FTP连接,你需要使用一个URLConnection

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

考虑作为替代FTPClientApache Commons Net其中有许多协议的支持。这是一个FTP list files example

+0

关于URLConnection的事情是,我只能从中获取InputStream。如果我可以使用InputStream来获取文件列表,那么肯定... –

+0

看一下这个例子,在第13行上它说'client.connect(“ftp.server.com”);'但是我得到一个错误当我尝试这个时,它说这个方法对于FTPClient是未定义的。 –

+0

该方法[绝对存在](http://commons.apache.org/net/api-3.2/org/apache/commons/net/SocketClient.html#connect(java.lang.String))。你有正确的进口? – Reimeus

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:[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(); 
    } 
} 

下的文件名EDITEDDemo Code Belongs to 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:%[email protected]%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(); 
     } 
    } 
} 
+1

服务器文件夹现在只有test.txt。 当我这样做时,我得到以下输出: 'drwx --- rwx 2 trucker2 inetuser 4096 Jan 22 12:40。 drwx --- rx 10 trucker2 inetuser 4096 Jan 22 10:53 .. -rw ---- r-- 1 trucker2 inetuser 8 Jan 22 12:40 test.txt' 那么我该如何使用它来读取文件...? –

+0

这些代码列出了您的目录下的文件名称,实际上列出了它们。当前目录,..父目录和你的test.txt如果你想获得更多关于这些文件的详细信息,你可以查看编辑链接。 – erhun

相关问题