JAVA如何找到符号链接所指向的目标文件路径?

8

我正在尝试找到Java中确定符号链接指向文件路径的方法。

我们有一个系统监视符号链接文件夹,根据文件名执行某些操作,然后删除该符号链接文件。

我需要做的是找出每个符号链接文件指向哪里,这样当删除符号链接时,也可以删除该文件。

这是在RHEL系统上使用Java语言。

如果有关API主题的任何指导,将不胜感激。我的搜索遇到了障碍。

2个回答

10

https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html#toRealPath-java.nio.file.LinkOption...-


Path toRealPath(LinkOption... options) throws IOException 返回现有文件的实际路径。该方法的精确定义因实现而异,但通常它源自此路径,是一个绝对路径,定位到与此路径相同的文件,但具有表示目录和文件的实际名称的名称元素。例如,在文件系统上进行文件名比较时不区分大小写,则名称元素表示它们实际大小写的名称。此外,结果路径会删除冗余的名称元素。
如果此路径是相对路径,则首先通过调用toAbsolutePath方法获取其绝对路径。
options数组可用于指示如何处理符号链接。默认情况下,符号链接将解析为其最终目标。如果存在NOFOLLOW_LINKS选项,则此方法不解析符号链接。一些实现允许使用特殊名称(例如“..”)引用父目录。在派生实际路径时,“..”(或等效项)前面跟随非“..”名称,则实现通常会导致两个名称都被删除。当不解析符号链接且前面的名称是符号链接时,只有在保证结果路径将定位到与此路径相同的文件时,才会删除名称。
参数:options - 指示如何处理符号链接的选项 返回值:表示此对象定位的文件的实际路径的绝对路径 抛出异常:IOException-如果文件不存在或发生I/O错误;SecurityException-对于默认提供程序,在安装了安全管理器的情况下,将调用其checkRead方法以检查对文件的读取访问权限,并且在此路径不是绝对路径时,将调用其checkPropertyAccess方法以检查对系统属性user.dir的访问权限。
使用nio中的toRealPath()方法。NO_FOLLOW_LINKS LinkOption与你尝试做的相反,因此不要使用它。
Path realPath = aFile.toPath().toRealPath()

Path realPath = aPath().toRealPath()

使用toAbsolutePath时需要注意的是,与之不同的是,toRealPath会抛出IOException异常,因为它实际上需要与文件系统交互以查找真实路径。


非常详细的API链接,另外还有一点需要注意,SecurityException异常也可能被抛出。这正是我所需要的信息。感谢@Novaterata的帮助。 - edjm
没错,但是IOException是被检查的异常,所以你要么修改你的接口,要么使用try/catch。 - Novaterata

10

java.nio.file.Files.readSymbolicLink 可能是您需要的。


1
感谢您提供导入路径。 - edjm
请注意,它将返回一个相对路径,例如/usr/local/link -> ./file表示/usr/local/file。然后,Files.readSymbolicLink返回file,而Paths.get("/usr/local/files").equals( Files.readSymbolicLink(Paths.get("/usr/local/link")))为false。在这种情况下,我使用了Files.isSameFile(file, link)。要获取链接目标文件的绝对路径,请使用link.toRealPath() - juanmf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接