在java中,Unix环境中的符号链接可以通过比较文件的规范路径和绝对路径来检测。然而,这个技巧在windows上不起作用。如果我执行
mkdir c:\foo
mklink /j c:\bar
从命令行,然后在java中执行以下行
File f = new File("C:/bar");
System.out.println(f.getAbsolutePath());
System.out.println(f.getCanonicalPath());
输出为
C:\bar
C:\bar
在Java 7之前的版本中,是否有任何方法可以检测Windows中的连接点?
4条答案
按热度按时间rqdpfwrv1#
在Java6或更早的版本中似乎没有任何跨平台机制来实现这一点,尽管使用JNA这是一个相当简单的任务
编辑:根据
getWin32FileAttributes()
可能返回错误的评论进行更新ifmq2ha22#
答案是否定的。连接点和符号链接不是同一类东西。JRE不检查它们,所以你引用的函数不能区分它们。
话虽如此,你可能会完成一些与以下:
如果连接的目录有内容,那么得到它下面某个东西的规范路径名的结果可能是“令人惊讶的”,并揭示了情况,因为它很可能是连接目标下的路径名。当然,只有当连接指向的目录非空时,这才起作用。
jutyujz03#
有了nio,即使不使用反射或JNA,也可以检测连接/重解析点或符号链接:
请注意,
Files.isSymbolicLink(path)
只为符号链接返回true
,而不为重解析点返回true
。如果需要区分两者,并且isReparsePointOrSymlink
返回true
,请同时检查Files.isSymbolicLink
。dphi5xsq4#
你可以试试这个肮脏的黑客为窗口