2012-04-15 3 views
0

Ich habe einen Java-Code, den ich verwenden würde, um die Dateien aus einem Verzeichnis auf einem Remote-Rechner herunterladen. Jetzt verwenden Sie die FTP-Klasse zur Verfügung. Das Problem tritt auf, wenn ich den Code ausführe, der zu allen Dateien führt, die gedownloadet werden, aber wenn ich die Größe von allen sehe, sehe ich, dass alle null Bytes sind und auch nichts enthalten. Kidly Hilfe, wenn Sie können analysieren, was könnte der mögliche Grund dafür sein?Herunterladen von Multimedia-Dateien eines Verzeichnisses in meine lokale Maschine mit Java-Code

package login.multiple; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.net.SocketException; 

import org.apache.commons.*; 
import org.apache.commons.net.ftp.FTPClient; 
import org.apache.commons.net.ftp.FTPFile; 

public class Downloader { 

    /** 
    * @param args 
    * @throws FTPException 
    * @throws FTPIllegalReplyException 
    * @throws IOException 
    * @throws IllegalStateException 
    * @throws FTPListParseException 
    * @throws FTPAbortedException 
    * @throws FTPDataTransferException 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     FTPFile[] list = null; 
     String fileNames[]; 
     String path = "\\Users\\XXX\\Documents\\Downloads\\Coldplay - Mylo Xyloto [mp3-vbr-2011]"; 
     int i = 0; 
     FileOutputStream fos = null; 
     FTPClient client = new FTPClient(); 
     //client.connect("192.168.1.2"); 
     try { 
      client.connect("127.0.0.1"); 
      client.login("xxx", "yyy"); 
      list = client.listFiles(path); 
      for(i=0;i<list.length;i++){ 
      //for(i=0;i<1;i++){ 
       fos = new FileOutputStream(list[i].getName()); 
       client.retrieveFile(path + list[i].getName(), fos); 
      } 
     } catch (SocketException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     try { 
      client.disconnect(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     } 
    } 

Antwort

1

Da Sie die FileOutputStream öffnen, eine gute Chance, dass Sie es zum Schließen auch verantwortlich sind. Fügen Sie fos.close() nach client.retrieveFile hinzu. Ihr Versuch-Fang-Design ist auch ein Durcheinander. Es hilft der Diagnose, wenn Sie es richtig machen. Setzen Sie alles nachclient.connect in eine try {...} finally { client.disconnect(); } und deklarieren Sie Ihre main Methode als throws Exception. Das wird Ihnen ein schnelles Verhalten geben.

+0

Ich versuchte es auch @Marko Topolnik.Könnte es ein Problem mit den Berechtigungen sein? – phoenix

+0

* "eine gute Chance ist, dass Sie dafür verantwortlich sind, es auch zu schließen." * ['FTPClient.retrieveFile (..)'] (http://commons.apache.org/net/apidocs/org/apache/commons /net/ftp/FTPClient.html#retrieveFile%28java.lang.String,%20java.io.OutputStream%29) geht weiter. * "Ruft eine benannte Datei vom Server ab und schreibt sie in den angegebenen OutputStream. Diese Methode schließt den angegebenen OutputStream NICHT." * (Ihre Großbuchstaben, nicht meine). ;) +1 –

+1

Genau, also musst du das 'nah 'dort hinstellen, auch wenn das nicht dein * einziges * Problem ist. –

Verwandte Themen