使用Java创建符号链接

16

我在使用Java的时候遇到了创建符号链接到目录的问题。我正在使用Files类中的createSymbolicLink()方法:http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html

绝对路径:

  • 目标: /some/path/target
  • 链接: /some/path/xxx/linkname

我本来期望在目录/some/path/xxx/中创建一个链接到文件夹/some/path/target,但实际上创建了一个链接从/some/path/xxx/linkname/some/path/xxx/target。我无法找出我做错了什么。

当我将链接从/some/path/linkname创建到/some/path/target时,一切都如预期工作。

非常感谢任何帮助。

编辑: 这是我的代码:

Path records = Paths.get(Properties.getProperty("records.path"));
Path recordsLink = Paths.get(Properties.getProperty("webserver.root") + System.getProperty("file.separator") + records.getFileName());
try {
    Files.createSymbolicLink(recordsLink, records);
} catch (IOException e) {
    e.printStackTrace();
}

"records.path"和"webserver.root"都是相对路径。

事实上,我刚刚找到了问题的解决方案:如果我这样做,它就能正常工作:

records = records.toAbsolutePath();

我曾以为createSymbolicLink()会使用绝对路径来创建符号链接,但我的想法是错误的。


1
你能发布你的代码吗? - Konstantin Yovkov
1
我找到了解决方案。请查看编辑后的帖子。 - omnibrain
3
请勿编辑问题以将答案放在那里。即使您自己找到了问题的答案,请将其放入适当的答案中。 - Michał Politowski
1
我本来想这样做的,但是由于声望不足10点,我必须等待10个小时才能回答自己的问题。 - omnibrain
1
已经过去了10个小时 :) - AlikElzin-kilaka
我认为这个问题的根源是cwd(当前工作目录)的位置。在Java中,它有时可能是任何地方。如果想使用相对路径,需要先cd到您想要链接的文件夹。请参见:Java更改文件工作目录 - will
1个回答

9
我找到了解决问题的方法:只要我这样做就可以了:
records = records.toAbsolutePath();

我曾认为createSymbolicLink()会使用绝对路径来创建链接,但事实并非如此。


3
不确定为什么要将路径转换为字符串再转回路径 -- records = records.toAbsolutePath() 是等价的。 - Max

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