2013-10-07 151 views
1

我試圖將FTP路徑中的所有文件下載到本地系統。但下載的文件在0 KB。會有什麼問題。請幫我找到錯誤。 (文件類型爲* .zip,* .pdf,* .xml)Ftp下載文件大小爲0 KB

在此先感謝。

package ConnectFTP; 

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.util.Calendar; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

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

public class FTPDownloader { 

FTPClient ftp = null; 

public FTPDownloader(String host, String user, String pwd) throws Exception { 
    ftp = new FTPClient(); 
    int reply; 
    ftp.connect(host); 
    reply = ftp.getReplyCode(); 
    if (!FTPReply.isPositiveCompletion(reply)) { 
     ftp.disconnect(); 
     throw new Exception("Exception in connecting to FTP Server"); 
    } 
    ftp.login(user, pwd); 
    ftp.setFileType(FTP.BINARY_FILE_TYPE); 
    ftp.enterLocalPassiveMode(); 
} 

public void downloadFile(String remoteFilePath, String localFilePath) { 
    try (FileOutputStream fos = new FileOutputStream(localFilePath)) { 
     this.ftp.retrieveFile(remoteFilePath, fos); 
    } catch (IOException ioe) { 
     ioe.printStackTrace(); 
    } 
} 
public void disconnect() { 
    if (this.ftp.isConnected()) { 
     try { 
      this.ftp.logout(); 
      this.ftp.disconnect(); 
     } catch (IOException ioe) { 

     } 
    } 
} 

public static void main(String[] args) { 
    try { 
     FTPDownloader ftpDownloader = 
       new FTPDownloader("192.168.3.1", "Adminuser", "password"); 
     ftpDownloader.listFolders(); 
     System.out.println("File downloaded successfully"); 
     ftpDownloader.disconnect(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void listFolders() { 
    try { 
     String ftpBasePath = "dev"; 
     FTPFile[] fileList = ftp.listDirectories("/" + ftpBasePath); 
     for (FTPFile file : fileList) { 
      listFiles(file.getName()); 
     } 
    } catch (IOException ex) { 
     Logger.getLogger(FTPDownloader.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

public void listFiles(String path) { 
    try { 
     FTPFile[] fileList = ftp.listFiles(path); 
     for (FTPFile file : fileList) { 
      String currentFileName = file.getName(); 
      String localPath = "E:\\FTPFiles\\"+currentFileName; 
      try (FileOutputStream fos = new FileOutputStream(localPath)) { 
       this.ftp.retrieveFile(currentFileName, fos); 
      } catch (IOException ioe) { 
       ioe.printStackTrace(); 
      } 
     } 
    } catch (IOException ioe) { 
     Logger.getLogger(FTPDownloader.class.getName()).log(Level.SEVERE, null, ioe); 
    } 
} 
} 
+0

您看到的任何錯誤? – Santosh

+0

沒有找到錯誤。 – Nitin

+0

從FTPDownloader中移除'throws Exception'並在方法內部使用'try-catch'。這會告訴你什麼是錯的。 – user2339071

回答

0

這裏是我的問題的解決方案。我通過一些小的修改修改了我的代碼。給定的代碼將獲得給定ftp路徑中的所有文件,並以文件夾結構將其存儲在本地目錄中。

輸出結構將是這樣的例子:

E:\ FtpFiles \ 2013 \月\ 11222013 \ *。*

* *是存儲文件夾結構,因爲它的文件。 FTP

操作系統:windows 2008服務器(64位)

然而,這將在所有的Windows FTP服務器的工作和移動文件到本地系統或給定的路徑。

謝謝。

package ConnectFTP; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.OutputStream; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import org.apache.commons.net.ftp.FTPClient; 
import org.apache.commons.net.ftp.FTPFile; 
import org.apache.commons.net.ftp.FTPReply; 


class UFTP { 

public static void main(String[] args) { 

    UFTP unftp = new UFTP(); 
    unftp.Unfile(); 
} 

private void Unfile() { 
    try { 
     //Current Date, Month, Year Starts 
     Date mmddyyyy = new Date(); 
     String today = new SimpleDateFormat("MMddyyyy").format(mmddyyyy); 
     String cyear = today.substring(4, 8); 
     String month[] = {"January", "February", "March", "April", "May", "June", "July", "August", 
      "September", "October", "November", "December"}; 
     String cmonthS = today.substring(0, 2); 
     int cmonthI = Integer.parseInt(cmonthS); 
     cmonthS = month[cmonthI - 1]; 
     System.out.println("Month : " + cmonthS); 
     System.out.println("Year : " + cyear); 
     //Current Date, Month, Year Ends 

     FTPClient ftp = new FTPClient(); 
     ftp.connect("192.168.3.5"); 
     if (!ftp.login("dev", "password")) { 
      ftp.logout(); 
     } 
     int reply = ftp.getReplyCode(); 
     if (!FTPReply.isPositiveCompletion(reply)) { 
      ftp.disconnect(); 
     } 
     ftp.enterLocalPassiveMode(); 
     String ftpBasePath = "devpath"; //ftp Base Directory 
     String localPath = "e:\\FtpFiles\\"; 

     //create DIR Tree 
     //Create Year Dir 
     File newDir = new File(localPath + cyear); 
     if (!newDir.exists()) { 
      System.out.println("creating directory: " + today); 
      boolean result = newDir.mkdir(); 
      if (result) { 
       System.out.println("Year DIR Created"); 
      } 
     } 
     localPath = localPath + cyear + "\\"; 

     //Create Month Dir 
     newDir = new File(localPath + cmonthS); 
     if (!newDir.exists()) { 
      System.out.println("creating directory: " + today); 
      boolean result = newDir.mkdir(); 
      if (result) { 
       System.out.println("Month DIR created"); 
      } 
     } 
     localPath = localPath + cmonthS + "\\"; 

     //Create Date Dir 
     newDir = new File(localPath + today); 
     if (!newDir.exists()) { 
      System.out.println("creating directory: " + today); 
      boolean result = newDir.mkdir(); 
      if (result) { 
       System.out.println("Today DIR created"); 
      } 
     } 

     //creates today's dir 
     //destinationBasePath = "e:\\FtpFiles\\" + today + "\\"; 
     localPath = localPath + today + "\\"; 
     FTPFile[] fileList = ftp.listDirectories("/" + ftpBasePath); 
     for (FTPFile directory : fileList) { 
      System.out.println(directory.getName()); 
      String currentDir = directory.getName(); 
      FTPFile[] ftpFiles = ftp.listFiles("/" + ftpBasePath + "/" + currentDir + "/"); 
      if (ftpFiles != null && ftpFiles.length > 0) { 
       for (FTPFile file : ftpFiles) { 
        if (!file.isFile()) { 
         continue; 
        } 
        System.out.println("File is " + file.getName()); 
        OutputStream output; 

        //Create Dir Starts 
        newDir = new File(localPath + currentDir); 
        // if the directory does not exist, create it 
        if (!newDir.exists()) { 
         System.out.println("creating directory: " + currentDir); 
         boolean result = newDir.mkdir(); 
         if (result) { 
          System.out.println("DIR created"); 
         } 
        } 
        //Create Dir Ends 

        output = new FileOutputStream(localPath + currentDir + "\\" + file.getName()); 
        ftp.retrieveFile("/" + ftpBasePath + "/" + currentDir + "/" + file.getName(), output); 
        output.flush(); 
        output.close(); 
       } 
      } 
     } 
     ftp.logout(); 
     ftp.disconnect(); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 
}