Monitoring progress using Apache Commons FTPClient

前端 未结 1 1759
没有蜡笔的小新
没有蜡笔的小新 2020-12-09 06:30

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 f

相关标签:
1条回答
  • 2020-12-09 06:42

    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.

    0 讨论(0)
提交回复
热议问题