gpt4 book ai didi

java - 检测符号链接(symbolic link)/连接点的跨平台方式?

转载 作者:可可西里 更新时间:2023-11-01 12:48:17 28 4
gpt4 key购买 nike

在java中,可以通过比较文件的规范路径和绝对路径来检测Unix环境中的符号链接(symbolic link)。但是,这个技巧在 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 中的连接?

最佳答案

在 Java 6 或更早版本中似乎没有任何跨平台机制,尽管使用 JNA 是一项相当简单的任务

interface Kernel32 extends Library {
public int GetFileAttributesW(WString fileName);
}

static Kernel32 lib = null;
public static int getWin32FileAttributes(File f) throws IOException {
if (lib == null) {
synchronized (Kernel32.class) {
lib = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
}
}
return lib.GetFileAttributesW(new WString(f.getCanonicalPath()));
}

public static boolean isJunctionOrSymlink(File f) throws IOException {
if (!f.exists()) { return false; }
int attributes = getWin32FileAttributes(f);
if (-1 == attributes) { return false; }
return ((0x400 & attributes) != 0);
}

编辑:根据关于 getWin32FileAttributes() 可能返回的错误的评论更新

关于java - 检测符号链接(symbolic link)/连接点的跨平台方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3249117/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com