2011-05-03 45 views
8

Tôi có một lớp FTPClient đơn giản tải xuống các tệp hình thành một máy chủ FTP. Tôi cũng cần theo dõi tiến trình tải xuống, nhưng tôi không thấy cách làm thế nào. Chức năng thực sự tải về tập tin này là một chức năng đơn giản củaTiến trình giám sát bằng cách sử dụng Apache Commons FTPClient

(your ftp client name).retrieveFile(arg1,arg2);

Làm thế nào tôi có thể theo dõi tiến trình download?

Xin cảm ơn, Anon.

+0

Bạn cần tương đương với hàm "băm" của chúng - không biết nó là gì. – duffymo

+0

Tôi đã đọc một cái gì đó về một copyStreamAdapter, nhưng tôi không biết bất kỳ chi tiết nào về nó. –

Trả lời

18

Bạn cần một CountingOutputStream (như được thấy trên Commons IO: http://commons.apache.org/io/api-release/index.html). Bạn tạo một trong những, quấn OutputStream điểm đến của bạn trong nó, và sau đó bạn có thể kiểm tra ByteCount theo yêu cầu để giám sát tiến trình download ..

EDIT: Bạn muốn làm điều gì đó như thế này:

int size; 
String remote, local; 

// do some work to initialize size, remote and local file path 
// before saving remoteSource to local 
OutputStream output = new FileOutputStream(local); 
CountingOutputStream cos = new CountingOutputStream(output){ 
    protected void beforeWrite(int n){ 
     super.beforeWrite(n); 

     System.err.println("Downloaded "+getCount() + "/" + size); 
    } 
}; 
ftp.retrieveFile(remote, cos); 

output.close(); 

Nếu chương trình của bạn đa luồng, bạn có thể muốn theo dõi tiến trình bằng cách sử dụng một luồng riêng biệt (ví dụ, đối với một chương trình GUI), nhưng đó là tất cả chi tiết ứng dụng cụ thể.

+1

Tôi có thể xem ví dụ không? –

Các vấn đề liên quan