Интерфейс Java для чтения содержимого папки файловой системы не очень производительный (как вы обнаружили). JDK 7 исправляет это с помощью совершенно нового интерфейса для такого рода вещей, который должен обеспечивать производительность на родном уровне для таких операций.
Основная проблема заключается в том, что Java выполняет собственный системный вызов для каждого отдельного файла. На интерфейсе с низкой задержкой это не так уж сложно, но в сети с даже умеренной задержкой это действительно добавляет. Если вы профилируете свой алгоритм выше, вы обнаружите, что большая часть времени тратится на надоедливый вызов isDirectory () - это потому, что вы выполняете туда-обратно для каждого отдельного вызова isDirectory (). Большинство современных ОС могут предоставлять такую информацию, когда первоначально запрашивался список файлов / папок (в отличие от запроса каждого отдельного пути к файлу для его свойств).
Если вы не можете дождаться JDK7, одной из стратегий для устранения этой задержки является использование многопоточности и использование ExecutorService с максимальным количеством потоков для выполнения рекурсии. Это не очень хорошо (вам приходится иметь дело с блокировкой ваших структур выходных данных), но это будет намного быстрее, чем выполнение этого однопоточного.
Во всех ваших дискуссиях о подобных вещах я настоятельно рекомендую вам сравнить с лучшим, что вы могли бы сделать, используя нативный код (или даже сценарий командной строки, который делает примерно то же самое). Сказать, что обход структуры сети занимает час, на самом деле не так уж много значит. Рассказ о том, что вы можете сделать это за 7 секунд, но в Java это займет час, привлечет внимание людей.