2013-06-04 2 views
1

Я пытаюсь загрузить все файлы в каталоге на мою локальную машину с помощью Apache Commons так:FTP несколько файлов с помощью Apache Commons в локальный каталог

import java.io.FileOutputStream; 
import org.apache.commons.net.ftp.FTPClient; 
import java.io.IOException; 
import java.net.SocketException; 
import org.apache.commons.net.ftp.FTPFile; 

public class FTPExample { 
    public static void main(String[] args) throws SocketException, IOException { 
     FTPClient client = new FTPClient(); 
     client.connect("MyHostName"); 
     client.enterLocalPassiveMode(); 
     client.login("username", "password"); 
     FTPFile[] files = client.listFiles("/App/"); 
     for (FTPFile file : files) { 
      System.out.println(file.getName()); 
      FileOutputStream fos = new FileOutputStream("Ftp Files/" + file.getName()); 
      client.retrieveFile(file.getName(),fos);    
     } 
    } 
} 

Умеет список файлов в каталоге, но Я пытаюсь загрузить FilenotFound Exception при загрузке файлов. Пожалуйста помоги. Моя Ошибка:

Exception in thread "main" java.io.FileNotFoundException: Ftp Files\01 (The system cannot find the path specified) 
    at java.io.FileOutputStream.open(Native Method) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:212) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:104) 
    at ftpexample.FTPExample.main(FTPExample.java:30) 
Java Result: 1 

EDIT: Мне нужно, чтобы файлы были сохранены в файле папка Ftp/в их исходных именах файлов.

+0

Похоже, что папка на локальной машине не существует. – assylias

+0

Нет, я не доверяю. – ErrorNotFoundException

ответ

6

Спасибо тем, кто пытался помочь. Я нашел ответ на свою проблему здесь. это как я это сделал:

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.OutputStream; 

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


public class FTPExample { 

    public static void main(String[] args) { 
     try { 

      //new ftp client 
      FTPClient ftp = new FTPClient(); 
      //try to connect 
      ftp.connect("MyHhostName"); 
      //login to server 
      if (!ftp.login("username", "password")) { 
       ftp.logout(); 
      } 
      int reply = ftp.getReplyCode(); 
      //FTPReply stores a set of constants for FTP reply codes. 
      if (!FTPReply.isPositiveCompletion(reply)) { 
       ftp.disconnect(); 
      } 

      //enter passive mode 
      ftp.enterLocalPassiveMode(); 
      //get system name 
      System.out.println("Remote system is " + ftp.getSystemType()); 
      //change current directory 
      ftp.changeWorkingDirectory("/App/PMIGENV/BACK/Finacle/FC/app/CDCI_LOGS/log/UBSADMIN"); 
      System.out.println("Current directory is " + ftp.printWorkingDirectory()); 

      //get list of filenames 
      FTPFile[] ftpFiles = ftp.listFiles(); 

      if (ftpFiles != null && ftpFiles.length > 0) { 
       //loop thru files 
       for (FTPFile file : ftpFiles) { 
        if (!file.isFile()) { 
         continue; 
        } 
        System.out.println("File is " + file.getName()); 
        //get output stream 
        OutputStream output; 
        output = new FileOutputStream("FtpFiles" + "/" + file.getName()); 
        //get the file from the remote system 
        ftp.retrieveFile(file.getName(), output); 
        //close output stream 
        output.close(); 

        //delete the file 
        // ftp.deleteFile(file.getName()); 

       } 
      } 

      ftp.logout(); 
      ftp.disconnect(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 
1

Вот рабочий код. Я пробовал это в течение длительного времени, но теперь он работает нормально. Раньше он загружал файлы размером 0Kb.

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 
import org.apache.commons.net.ftp.FTPClient; 
import org.apache.commons.net.ftp.FTPFile; 


public class FTPDownload { 

public void ftpDownload() throws IOException 
{ 
    String host="your_host_name"; 
    String uname="your_user_name"; 
    String pass="your_password"; 
    String remoteDIR="/public_html/tmp"; 
    String localDIR="D://FTP"; 

    //Object for FTPClient class 

    FTPClient ftp=new FTPClient(); 

    ftp.connect(host); 
    boolean login=ftp.login(uname, pass); 
    ftp.enterLocalPassiveMode(); 
    ftp.changeWorkingDirectory(remoteDIR); 
    FTPFile[] files=ftp.listFiles(); 


    try{ 
      if(login){ 
     System.out.println("Your Are Logged In "+ftp.getStatus()); 
     System.out.println("Working Directory is "+ftp.printWorkingDirectory()); 
     System.out.println("Local Directory is "+localDIR); 
     System.out.println("Total Files Are "+files.length); 


     if(files != null && files.length >0) 
     { 
      for(FTPFile fl:files) 
      { 
       if(!fl.isFile()) 
       { 
        continue; 
       } 
       System.out.println(fl.getName()); 
       OutputStream out; 
       out=new FileOutputStream(localDIR+"/"+fl.getName()); 
       ftp.retrieveFile(fl.getName(), out); 
       out.close(); 
      } 
     } 

    } 
    else 
    { 
     System.out.println("Sorry"); 
    } 

    ftp.logout(); 
    ftp.disconnect(); 

    } 

    catch(Exception e){ 
     System.out.println(e); 
    } 


} 

public static void main(String[] args) throws IOException { 
    FTPDownload ft=new FTPDownload(); 
    ft.ftpDownload(); 
} 
} 
+0

Вам не кажется, что это слишком поздно для этого? – ErrorNotFoundException

+0

Я знаю это, но я просто хотел поделиться тем, что я сделал, я думал, что это может помочь кому-то вроде меня, который действительно хочет решить ту же проблему. –

Смежные вопросы