2013-01-22 11 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スキームが 『ファイル』ではありません。」

私は私のURLは「FTP://」で始まるので、これは理解:私は私はそれについて行うことになってるかを把握するように見えることはできませんしかし

はなく「ファイル」!

おそらくこれについては、より良い方法がありますか?

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

多くのプロトコルをサポートしていApache Commons Netから代替FTPClientとして考えてみましょう:FTP接続を処理することはできません

+0

を編集しましたか? – parsifal

+0

そして、この質問は何度も聞かれました。おそらく他の答えの1つがあなたを助けるでしょう:http://stackoverflow.com/search?q=[java]+Accessing+a+File+from+an+FTP+Server – parsifal

+0

あなたは助けになる、あるいは冷笑的になりたいですか? 私は望んでいた。ことは、私はファイルのリストが必要です。 私はこれについて別の方法を知りません。 –

答えて

7

Fileオブジェクトには、あなたはURLConnectionを使用する必要があります。ここには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を使用する場合はこの種のコードが必要です。 `URL:あなたは` File`のコンストラクタは `ファイル以外を扱うと思いますなぜコードリスト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(); 
    } 
} 

下にあるファイルの名前はDemo 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

関連する問題