java.lang.UnixProcess固有地慢于在NTFS上执行`find`?

时间:2011-03-04 14:45:16

标签: java scala find ntfs

我试图使用以下命令获取目录下的文件列表:

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。

1 个答案:

答案 0 :(得分:4)

您应该使用该进程的stdout和stderr流,因为find可能正在写入并阻塞。

有关详细信息,请查看帖子When Runtime.exec() won't。他们使用StreamGobbler来读取输出流,因此您的进程不会挂起。