2010-03-18 2 views
8

나는 다음과 같은 파일 객체 심볼 링크를 통해 디렉토리를 가리키는,파일의 listFiles()가 심볼릭 링크에서 작동하지 않습니까?

File directory = new File("/path/symlink/foo/bar"); 
String[] files = directory.listFiles(); 

때 listFiles()이 때문에 심볼릭 링크이며, null를 돌려 있나요? 심볼릭 링크가있는 경로를 사용하여 막대의 파일을 실제로 나열하려면 어떻게합니까?

답변

14

이 수수께끼 동작을 인터넷 검색을하는 동안 내가 본 바에 따르면, 자바는 다른 파일 작업에 사용하기 전에 당신이 그 경로에 대한 링크가 포함 된 File.getCanonicalFile()를 호출해야합니다 .

그래서 :

File directory = new File("/path/symlink/foo/bar").getCanonicalFile(); 
String[] files = directory.listFiles(); 
0

당신이 할 수 NIO File library (> 자바 7)을 사용하여, 제안 @mickthompson 무엇 ..extending :


Path

Path link = Paths.get("/path/symlink/foo/bar"); 
if (Files.isSymbolicLink(link)) { 
    link = Files.readSymbolicLink(link); 
} 

Path[] files = Files.list(link).toArray(size -> new Path[size]); 
쉽게 File로 변환됩니다 그래서 모든 예전 Java IO 코드를 안전하게 보관할 수 있습니다. @see Path#toFile().

0

이 문제는 3.0.1 릴리스에서 수정되었습니다. 릴리스 된 후에는 새로운 버그를 열어 여전히 문제가있는 경우 알려 주시고 문맥에 따라 this one에 다시 연결하십시오.

관련 문제