java.lang. UnixProcess по своей сути медленно выполняет `find` в NTFS? - PullRequest
2 голосов
/ 04 марта 2011

Я пытался получить список файлов в каталоге, используя:

val d = "..." // Path to a directory on a NTFS partition
val pb = new ProcessBuilder("find", d, "-type", "f", "-print")
pb.directory(new java.io.File(d))
val p = pb.start()
p.waitFor()
val listOfFiles = scala.io.Source.fromInputStream(p.getInputStream).getLines

Однако, для p.waitFor() требуется больше минуты.
Если я выполняю find . -type f -printоднако в bash при работе с каталогом для завершения требуется менее секунды.
Следовательно, java.lang.UnixProcess по своей сути медленен в разделе NTFS или я что-то не так делаю?

Использование Scala 2.8.1, Java 1.6.0_24-b07 в Ubuntu 10.10.

1 Ответ

4 голосов
/ 04 марта 2011

Вы должны использовать потоки stdout и stderr процесса, потому что find может записывать в них и блокировать.

Посмотрите на сообщение, Когда Runtime.exec () не будет , для получения дополнительной информации. Они используют StreamGobbler для чтения выходных потоков, чтобы ваш процесс не зависал.

...