2011-03-04 99 views
1

我試圖讓使用目錄下的文件列表:java.lang.UnixProcess固有地在NTFS上執行`find`的速度很慢?

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()正在超過一分鐘來完成更多。
如果我在bash執行find . -type f -print,但是在目錄中,它只需要不到一秒的時間完成。
因此,是在java.lang.UnixProcess在NTFS分區固有緩慢,或者我做錯了什麼?

在Ubuntu 10.10上使用Scala 2.8.1,Java 1.6.0_24-b07。

回答

4

您應該使用進程的stdout和stderr流,因爲find可能正在寫入並阻止。

查看帖子When Runtime.exec() won't,瞭解更多信息。他們使用StreamGobbler來讀取輸出流,以便您的進程不會掛起。

+0

使用這篇文章的想法,我將InputStream的處理移動到_Thread_(實際上是_Callable_),現在它可以工作。謝謝! – 2011-03-05 12:37:27