2017-02-15 25 views
0

這裏是方法的Java 8 Files.walk沒有返回的所有路徑

public List<Path> listAllPaths() throws IOException { 
     Files.walk(Paths.get("/tmp")).forEach(e -> System.out.println(e.toString())); 
     return Files.walk(Paths.get(filePath)).collect(Collectors.toList()); 
    } 

當我執行這種方法,我只看到/ tmp目錄打印並返回 我希望能看到裏面

所有子目錄和文件

Javadoc中說

「步行在給定的起始文件基礎的文件樹返回被懶惰地填充路徑的流。該文件樹進行遍歷深度優先,在流中的元素是獲得該路徑的對象彷彿通過resolvi相對於開始的路徑。「

+0

肯定有東西在'/ tmp'?你有權限閱讀那裏的東西? –

+0

@brainstorm試試'/ private/tmp'可能是? (如果你在Mac上) – Eugene

+0

我有在Mac上的/ tmp中的內容。我可以做'ls/tmp' –

回答

3

這是一個符號鏈接,而不是一個真正路徑:

Path p = Paths.get("/tmp"); 
System.out.println(Files.isSymbolicLink(p)); // returns true 

的真實路徑是​​

你可以做一個

ls -l 

,並看到一些文件夾由用戶擁有_mbsetupuser用戶。

你也可以走符號鏈接爲通過在評論中建議:

Files.walk(Paths.get("/tmp"), FileVisitOption.FOLLOW_LINKS) 
+0

啊哈,好點。值得一提的是['FileVisitOptions.FOLLOW_LINKS'](https://docs.oracle.com/javase/8/docs/api/java/nio/file/FileVisitOption.html#FOLLOW_LINKS)。 –

+0

是的。有用。但不幸的是,其中一個文件/ tmp/cvcd導致AccessDeniedException,所以我沒有返回任何列表。 –

+0

@brainstorm我已經編輯了一些答案 – Eugene

相關問題