java - 在 Java 中解析目录符号链接(symbolic link)

标签 java symlink

给定一个 FilePath 目录对象,如何检查它是否是符号链接(symbolic link)以及如何将其解析为实际目录?

我尝试了 File.getCannonicalFile()Files.isSymbolicLink(Path) 和许多其他方法,但它们似乎都不起作用。一件有趣的事情是 Files.isDirectory(Path) 返回 false,而 Files.exists(Path) 为 true。 java 是否将符号链接(symbolic link)视为文件而不是目录?

最佳答案

如果你想完全解析一个Path指向实际内容,使用.toRealPath():

final Path realPath = path.toRealPath();

这将解析所有符号链接(symbolic link)等。

但是,由于这可能会失败(例如,符号链接(symbolic link)无法解析),因此您必须在此处处理 IOException

因此,如果你想测试一个符号链接(symbolic link)是否指向一个现有目录,你必须这样做:

Files.isDirectory(path.toRealPath());

请注意 Files.exists() 的一个微妙之处:默认情况下,它遵循符号链接(symbolic link)

这意味着如果您有一个符号链接(symbolic link)作为目标不存在的路径,那么:

Files.exists(path)

将返回 FALSE;但是这个:

Files.exists(path, LinkOption.NOFOLLOW_LINKS)

将返回 TRUE。

在“Unix 说法”中,这是 stat()lstat() 之间的区别。

关于java - 在 Java 中解析目录符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28371993/

相关文章:

java - 尽管程序一次扫描一个元素,但程序仍在无限地获取输入

java - Spring:方法 getBean(String...) 如何根据输入字符串查找 bean?

java - 文件的 listFiles() 不适用于符号链接(symbolic link)?

linux 根据最近修改的文件创建符号链接(symbolic link)

php - Laravel - 符号链接(symbolic link)公用文件夹

java - Java制作的小程序可以向服务器发送信息吗?

java - 什么是 Vert.x verticle "instances",它们与线程有什么关系?

java - 使用 Estimote SDK 的信标检测在 Android Lollipop 中崩溃

git - 在两个存储库之间保持两个文件同步 - 符号链接(symbolic link)?还是另一种方式?

linux - 在具有相同顶级父目录的文件夹内使用多个 Git 存储库?