2013-01-22 19 views
6

Mam więc ten serwer FTP z wieloma folderami i plikami wewnątrz.Java: Uzyskiwanie dostępu do pliku z serwera FTP

Mój program potrzebuje dostępu do tego serwera, odczytania wszystkich plików i wyświetlenia ich danych.

Dla celów programistycznych pracowałem z plikami na moim dysku twardym, w folderze "src".

Ale teraz, gdy serwer jest już uruchomiony, muszę podłączyć do niego oprogramowanie.

Zasadniczo chcę uzyskać listę plików w określonym folderze na serwerze.

To, co mam tak daleko:

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

Ale pojawia się błąd „schemat URI nie jest«file».”

Rozumiem to, ponieważ mój URL zaczyna się od „ftp: //”, a nie „file:”

Jednak nie wydaje się dowiedzieć, co mam z tym zrobić!

Być może jest lepszy sposób na rozwiązanie tego problemu?

+0

Dlaczego sądzisz 'konstruktor file' będzie obsługiwać coś innego niż' 'file: URL? – parsifal

+0

I to pytanie było wielokrotnie zadawane; może jedna z innych odpowiedzi pomoże ci: http://stackoverflow.com/search?q=[java]+Aplikacja+a+pliku+z+serwera+FTP+ – parsifal

+0

Czy chcesz być pomocny, czy cyniczny? Miałem nadzieję. Chodzi o to, że potrzebuję listy plików. Nie znam innego sposobu, aby to rozwiązać. –

Odpowiedz

7

File obiekty nie mogą obsługiwać połączenia FTP, trzeba użyć URLConnection:

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

Rozważmy jako alternatywny FTPClient od Apache Commons Net który posiada wsparcie dla wielu protokołów. Oto FTP list files example.

+0

Rzeczą dotyczącą połączenia URLConnection jest to, że mogę uzyskać tylko InputStream z niego.Gdybym mógł użyć tego InputStream, aby uzyskać listę plików, na pewno ... –

+0

Patrząc na przykład, na linii 13 jest napisane 'client.connect (" ftp.server.com ");' ale pojawia się błąd kiedy próbuję tego, mówi, że ta metoda jest niezdefiniowana dla FTPClient. –

+0

Ta metoda jest [zdecydowanie tam] (http://commons.apache.org/net/api-3.2/org/apache/commons/net/SocketClient.html#connect (java.lang.String)). Czy masz prawidłowy import? – Reimeus

3

jeśli używasz identyfikatora URI z plikiem, możesz użyć swojego kodu, ale jeśli chcesz używać ftp, potrzebujesz tego rodzaju kodu; Lista kodowa nazwa plików pod swoim serwerze 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

Folder serwera, w tej chwili ma tylko plik test.txt. Kiedy to zrobię, otrzymuję następujący wynik: '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' Jak mogę tego użyć, aby przeczytać akta... ? –

+0

Ten kod zawiera listę plików znajdujących się w twoim katalogu, a właściwie listę. katalog bieżący, .. katalog nadrzędny i plik test.txt, jeśli chcesz uzyskać więcej informacji o tych plikach, możesz sprawdzić link do edycji. – erhun

Powiązane problemy