Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Monitoring progress using Apache Commons FTPClient

I have a simple FTPClient class that downloads files form an FTP server. I also need to monitor progress of the download, but I do not see a way how. The actually download files function is a simple function of

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

How can I monitor the download progress?

Thanks, Anon.

like image 372
Christian Green Avatar asked May 03 '11 21:05

Christian Green


People also ask

What is FTPClient in Java?

FTPClient encapsulates all the functionality necessary to store and retrieve files from an FTP server. This class takes care of all low level details of interacting with an FTP server and provides a convenient higher level interface.

Does Apache FTPClient support SFTP?

Apache FTPClient doesn't support SFTP at the moment. However, you can use JSch - Java Secure Channel. Onkar Joshi goes into more details of the library to use for FTP, SFTP, FTPS file transfer in Java.


1 Answers

You need a CountingOutputStream (as seen on Commons IO: http://commons.apache.org/io/api-release/index.html). You create one of those, wrap your destination OutputStream in it, and then you can check the ByteCount on demand to monitor the download progress..

EDIT: You'd do something like this:

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();

If your program is multithreaded you might want to monitor the progress using a separate thread (for example, for a GUI program), but that's all application-specific detail.

like image 72
Femi Avatar answered Oct 22 '22 18:10

Femi