Я нуждаюсь в небольшой помощи с JProgressBar
компонент. Моя программа копирует файлы от одного места до другого использования java.nio FileChannels
. Фактический метод копии transferFrom()
.
У меня есть два вопроса теперь.
Как я контролирую прогресс передачи FileChannels? Все учебные руководства я нашел использование стандартным java.io InputStreams и увеличиваю интервал прогресса в то время как цикличное выполнение через inputstream.
Мои методы копии (методы 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! Я действительно ценю Ваш вход! Теперь, когда мониторинг прогресса единственного файла работает, давайте решим мою вторую проблему.
Я хотел бы, нет я имею к, прогресс монитора не только единственный файл, а скорее набор файлов. Мои основные методы копии выполняют итерации через различные каталоги и копируют соответствующие файлы путем вызова фактического метода передачи. Таким образом, методы копии не передают файлы, они просто выбирают файлы для фактического метода передачи.
Невозможно отслеживать ход однократного вызова transferFrom
, но, поскольку вы можете передать ему параметры смещения и длины, вы можете реализовать свой собственный цикл и обновлять индикатор выполнения между фрагментами данных подходящего размера.
... хотя это совершенно не относится к использованию transferTo ()
в первую очередь, чтобы передать копирование в ядро, насколько это возможно. Либо вы хотите это сделать, либо хотите увидеть прогресс. Вам остается выбирать. По крайней мере, вы должны выбрать степень детализации отображения прогресса.