在java中,Unix环境中的符号链接可以通过比较文件的规范path和绝对path来检测。 但是,这个技巧在windows上不起作用。 如果我执行
mkdir c:foo mklink /jc:bar
从命令行,然后在java中执行以下行
file f = new file("C:/bar"); System.out.println(f.getabsolutePath()); System.out.println(f.getCanonicalPath());
输出是
C:bar C:bar
是否有任何检测windows中的连接点的Java 7以前的方式?
我如何制作一个Java跨平台的GUI应用程序(windows,linux)? 我应该使用什么工具?
当某人提交非法文件名的文件时更新一个颠覆的工作副本
你如何从远程机器获得IP地址?
编译并运行跨平台的testing环境
跨平台的build议AndroID / iOS / windows
如何处理交叉平台C库中的Unicodepath?
在纯C中replace链接器部分
重命名函数vs undef:与windows API冲突
如何在Netbeans中创build一个跨平台的C ++应用程序?
将64位和32位版本的应用程序转换为相同的二进制文件?
在Java 6或更早的版本中似乎没有任何跨平台的机制,尽管它使用JNA是一个相当简单的任务
interface coreel32 extends library { public int GetfileAttributesW(WString filename); } static coreel32 lib = null; public static int getWin32fileAttributes(file f) throws IOException { if (lib == null) { synchronized (coreel32.class) { lib = (coreel32) Native.loadlibrary("kernel32",coreel32.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()
答案是不'。 连接点和符号链接是不一样的事情。 JRE不检查它们,所以你引用的函数不能区分它们。
说完这个,你可以用下面的方法来完成一些事情:
如果联结的目录有内容,那么得到标准路径名的结果可能是“令人惊讶的”,并且显示出情况,因为它可能是联结目标下的路径名。 这只有在结点指向的目录非空时才有效。
你可以尝试这个肮脏的黑客入侵窗户
if (f.isDirectory() || f.isfile()) { System.out.println("file or Directory"); } else { System.out.println("link"); }
总结以上是内存溢出为你收集整理的跨平台的方式来检测符号链接/连接点?全部内容,希望文章能够帮你解决跨平台的方式来检测符号链接/连接点?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)