Проблема в том, что вы не знаете заранее, сколько у вас файлов. Как правило, у вас есть возможность дважды просмотреть файловую систему: в первый раз вы просто вводите каталоги и считаете только все файлы.
На основе этого числа вы можете рассчитать процент при втором запуске, когда вы посмотрите на сами файлы.
Это, очевидно, удлиняет процесс, и снова у вас нет прогресса при первом сканировании.
Что вы можете сделать, так это начать первое сканирование в другом потоке. Предполагая, что для сопоставления с образцом требуется больше времени, чем просто подсчет файлов, подсчет будет быстрее, и вы сможете динамически настраивать JProgressBar. Затем он начнет работать ненадежно и со временем станет более точным.
Я предполагаю, что этот подход похож на тот, который реализован в механизме копирования Windows. Они также сначала сканируют файлы без информации о ходе выполнения, а затем начинают копирование с информацией о ходе выполнения. Однако это может привести к эффектам, которые вы, вероятно, знаете по Windows-машинам, где файловые операции имеют информацию типа «осталось 2 часа», и вдруг через 2 минуты это делается, или наоборот.
Изменить:
Извините, я только сейчас заметил, что вы хотите перебрать все файлы на жестком диске, а не только начать с какой-то точки.
Вы можете суммировать размер файла, который вы уже видели, если вы знаете свободное и общее дисковое пространство, вы можете вычислить процент, который уже сделан. Однако прогресс, скорее всего, не будет гладким, поскольку размеры файлов, как правило, сильно различаются.
person
kap
schedule
07.04.2014