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.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With