Как контролировать прогресс (JProgressBar) с FileChannels transferFrom () метод?

Я нуждаюсь в небольшой помощи с JProgressBar компонент. Моя программа копирует файлы от одного места до другого использования java.nio FileChannels. Фактический метод копии transferFrom().

У меня есть два вопроса теперь.

  1. Как я контролирую прогресс передачи FileChannels? Все учебные руководства я нашел использование стандартным java.io InputStreams и увеличиваю интервал прогресса в то время как цикличное выполнение через inputstream.

  2. Мои методы копии (методы FileChannel) инкапсулируются в отдельном методе, который вызывается другими методами, которые выполняют итерации, хотя источник и папки назначения и затем вызывают методы FileChannel для каждого файла.

Как я реализую ProgressBar для полного механизма копии?

Хорошо я должен был считать FAQ немного ранее, таким образом, я предполагаю, что должен отредактировать свое первое сообщение вместо того, чтобы комментировать ответы, правильно?

Хорошо это - то, что я сделал до сих пор. Так же, как jambjo предложенный (спасибо между прочим), transferFrom() метод теперь циклично выполняется. BTW: существует ли предпочтительный размер блока, или он зависит от гранулярности моего индикатора выполнения, как заявила EJP?

Вот мой фрагмент кода:

while (position < size) {
 position += destination.transferFrom(source, position, chunkSize);
 current =  (position/size)*100;
 System.out.println(current);
}

К сожалению, 'текущее' значение остается 0 в цикле, и у меня нет идеи почему. Я пропускаю что-то?

Еще раз спасибо jambjo! Я действительно ценю Ваш вход! Теперь, когда мониторинг прогресса единственного файла работает, давайте решим мою вторую проблему.


Я хотел бы, нет я имею к, прогресс монитора не только единственный файл, а скорее набор файлов. Мои основные методы копии выполняют итерации через различные каталоги и копируют соответствующие файлы путем вызова фактического метода передачи. Таким образом, методы копии не передают файлы, они просто выбирают файлы для фактического метода передачи.

15
задан Peter 15 February 2010 в 13:24
поделиться

2 ответа

Невозможно отслеживать ход однократного вызова transferFrom , но, поскольку вы можете передать ему параметры смещения и длины, вы можете реализовать свой собственный цикл и обновлять индикатор выполнения между фрагментами данных подходящего размера.

7
ответ дан 1 December 2019 в 01:23
поделиться

... хотя это совершенно не относится к использованию transferTo () в первую очередь, чтобы передать копирование в ядро, насколько это возможно. Либо вы хотите это сделать, либо хотите увидеть прогресс. Вам остается выбирать. По крайней мере, вы должны выбрать степень детализации отображения прогресса.

2
ответ дан 1 December 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: