2017-02-15 68 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

相关问题