2011-03-04 4 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()는 완료하는 데 1 분 이상을하고있다.
에서 find . -type f -print을 실행하는 경우 디렉토리에서 bash을 완료하는 데 1 초도 걸리지 않습니다.
따라서 NTFS 파티션에서 java.lang.UnixProcess이 본질적으로 느리거나 잘못된 것이 있습니까?

Ubuntu 10.10에서 Scala 2.8.1, Java 1.6.0_24-b07을 사용하십시오.

답변

4

find이 쓰기 중이거나 차단되어있을 수 있으므로 프로세스의 stdout 및 stderr 스트림을 사용해야합니다.

자세한 내용은 게시물 When Runtime.exec() won't을 참조하십시오. StreamGobbler를 사용하여 출력 스트림을 읽으면 프로세스가 멈추지 않습니다.

+0

기사의 아이디어를 사용하여 'InputStream' 처리를 _Thread_ (실제로 _Callable_)로 옮겼으며 이제는 작동합니다. 감사! –

관련 문제