我试图使用以下命令获取目录下的文件列表:
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。
答案 0 :(得分:4)
您应该使用该进程的stdout和stderr流,因为find
可能正在写入并阻塞。
有关详细信息,请查看帖子When Runtime.exec() won't。他们使用StreamGobbler来读取输出流,因此您的进程不会挂起。