java - 为什么 Files.walk(path, FileVisitOption.FOLLOW_LINKS) 不关注链接?

标签 java symlink

在我的 Mac OS X 上,我有以下文件层次结构:

(base) bohaoli@bunnyBoom-2:~/Desktop/tuto/tuto_link$ tree

.
├── a
│   └── b
│       ├── c
│       │   └── d
│       └── link -> /Users/bohaoli/Desktop/tuto/tuto_link/e/f/g/h/cousin.txt
└── e
    └── f
        └── g
            └── h
                └── cousin.txt

但是下面代码的最后两行

Path path = Paths.get("/Users/bohaoli/Desktop/tuto/tuto_link/a");
Files.walk(path, FileVisitOption.FOLLOW_LINKS).forEach(System.out::println);
Files.walk(path).forEach(System.out::println);

给出相同的结果:

/Users/bohaoli/Desktop/tuto/tuto_link/a
/Users/bohaoli/Desktop/tuto/tuto_link/a/b
/Users/bohaoli/Desktop/tuto/tuto_link/a/b/link
/Users/bohaoli/Desktop/tuto/tuto_link/a/b/c
/Users/bohaoli/Desktop/tuto/tuto_link/a/b/c/d

为什么即使我提供了 FileVisitOption.FOLLOW_LINKS 选项,链接也没有被关注?

最佳答案

FileVisitOption.FOLLOW_LINKS 仅适用于符号目录链接。否则您期望的结果是什么(您的结果中已经有 /Users/bohaoli/Desktop/tuto/tuto_link/a/b/link)。访问节点时,您可以使用这些方法处理文件符号链接(symbolic link):

boolean Files.isSymbolicLink(file.toPath())
File getCanonicalFile()
String getCanonicalPath()

参见FileFiles文档。

关于java - 为什么 Files.walk(path, FileVisitOption.FOLLOW_LINKS) 不关注链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59468074/

相关文章:

java - 将字段传递给自定义反序列化器类 Jackson

git clone -c core.symlinks=true 不起作用

windows - 在 Windows 上使用 Git 添加符号链接(symbolic link)文件作为文件

java - 我如何找到并计算这里有多少特定类型的空格?

java - Android AudioTrack 在某些设备上速度极慢

java - 为什么java不允许为子类中的静态方法分配较弱的访问权限?

java - 如何测试数组是否具有特定顺序的特定数据

macos - 如何对 Go 工作区进行碎片化

linux - 我可以从 Yocto 配方为尚不存在的文件创建符号链接(symbolic link)吗

mysql - 如果datadir设置为软链接(soft link)则无法启动mysql