Мониторинг прогресса с помощью Apache Commons FTPClient - PullRequest
8 голосов
/ 04 мая 2011

У меня есть простой класс FTPClient, который загружает файлы с FTP-сервера.Мне также нужно следить за ходом загрузки, но я не вижу пути как.На самом деле функция загрузки файлов - это простая функция

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

Как я могу отслеживать ход загрузки?

Спасибо, Anon.

1 Ответ

18 голосов
/ 04 мая 2011

Вам необходим CountingOutputStream (как видно на Commons IO: http://commons.apache.org/io/api-release/index.html).. Вы создаете один из них, оборачиваете в него целевой объект OutputStream, а затем можете проверить ByteCount по требованию, чтобы отслеживать ход загрузки.

РЕДАКТИРОВАТЬ: вы бы сделали что-то вроде этого:

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

Если ваша программа многопоточная, вы можете отслеживать прогресс, используя отдельный поток (например, для программы с графическим интерфейсом),но это все детали приложения.

...