2012-06-28 2 views
3

Я использую apache commons-net для загрузки файла с FTP-сервера. Это очень хорошо работает. В части, с которой я столкнулся, показана работа загрузки с использованием JProgressBar.Как показать JProgressBar при загрузке файла с FTP-сервера

Следующий код демонстрирует, как я скачиваю файл, мне нужно:

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 Apache Commons Util используется в коде выше.

2

Вы должны быть в состоянии использовать CopyStreamListener. Обратите внимание, что метод bytesTransferred (CopyStreamEvent event) не используется, но должно быть bytesTransferred (long totalBytesTransferred, int bytesTransferred, long streamSize).

0

В NetBeans создайте настольное приложение. Он дает вам заранее подготовленную панель прогресса с монитором задач и значками занятости и всем необходимым. Используйте CopyStreamListener и используйте метод bytesTransferred для управления панелью progress.

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