2012-06-28 201 views
3

我使用apache commons-net從FTP服務器下載文件。這很多工作正常。我遇到問題的部分是使用JProgressBar顯示下載進度。如何在從FTP服務器下載文件時顯示JProgressBar

下面的代碼演示如何,我下載我需要的文件:

public void download() { 
    try { 
     FTPClient ftpClient = new FTPClient(); 

     String fileName = "OFMEX_MANUFACTURING.jar"; 

     ftpClient.connect("192.168.1.242"); 
     int replyCode = ftpClient.getReplyCode(); 

     if (!FTPReply.isPositiveCompletion(replyCode)) { 
      JOptionPane.showMessageDialog(null, "Server Down"); 
     } 

     boolean login = ftpClient.login("bioftp", "bioftp"); 

     boolean changeWorkingDirectory = ftpClient.changeWorkingDirectory("ofmex\\Linux\\"); 
     boolean setFileType = ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 

     ftpClient.enterLocalPassiveMode(); 

     OutputStream data = (OutputStream) new FileOutputStream(fileName); 

     ftpClient.retrieveFile(fileName, data); 
     ftpClient.abort();    
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

回答

2

如果您打算直接撥打retriveFile(),那麼您可能無法知道傳輸了多少字節。相反,您可以逐字節地檢索文件,並保持傳輸的每個字節的計數。您還可以獲取要傳輸的總字節數,以便可以計算百分比以顯示在進度欄中。

InputStream stSource = new FileInputStream(locFile); 
OutputStream stDest = new BufferedOutputStream(ftp.storeFileStream(remFile), ftp.getBufferSize()); 

Util.copyStream(stSource, stDest, ftp.getBufferSize(),CopyStreamEvent.UNKNOWN_STREAM_SIZE, new CopyStreamAdapter() { 
    public void bytesTransferred(long totalBytesTransferred,int bytesTransferred, long streamSize) { 
     long megsTotal = 0; 
     long megs = totalBytesTransferred/1048576; 

     for (long l = megsTotal; l < megs; l++) { 
      System.err.print("|"); 
     } 

     megsTotal = megs; 
    } 
}); 

參見this阿帕奇公地util的上面的代碼中使用。

2

您應該能夠使用CopyStreamListener。請注意,bytesTransferred(CopyStreamEvent事件)方法未使用,但bytesTransferred(long totalBytesTransferred,int bytesTransferred,long streamSize)應該是。

0

在NetBeans中創建一個Desktop應用程序。它爲您提供預先建好的進度條,其中包含任務監視器和忙圖標以及您需要的所有內容。使用CopyStreamListener並使用bytesTransferred方法來管理進度條。

相關問題