如何在Java NIO.2中创建相对符号链接?

5

在 Linux 中我们可以创建相对符号链接。

 ln -s targetfile symlink

在Java NIO.2中

Files.createSymbolicLink(symlink, targetfile); 

这段代码不能使用相对路径。


使用绝对路径或Runtime.getRuntime().exec("ln -s bla-blah")有什么问题? - Taras
请详细说明“不支持相对路径”的含义。Files.createSymbolicLink(FileSystems.getDefault().getPath("lnk"), FileSystems.getDefault().getPath("target"))按预期工作,在当前目录中创建了 lnk -> target 的符号链接。 - dhke
@Taras 没错,就是用那段代码。但我需要跨平台支持。 - hurelhuyag
@Taras 如果我复制到另一个位置,绝对路径将无法工作。 - hurelhuyag
@dhke 下面的代码有两个参数。第三个参数是当前目录。需要当前目录是因为我需要相对符号链接。但是NIO API没有替代方法。Runtime.getRuntime().exec(new String[]{"ln", "-s", "myfile", "link"}, null, new File("/home/user/test/")); - hurelhuyag
2个回答

7
以下是在创建符号链接时使用相对路径以使其在跨平台环境中可访问的代码。
Path source = Paths.get("D:\\A\\B\\C\\D\\E\\F\\G\\a.mp4"); // original file's absolute path
Path link = Paths.get("D:\\A\\B\\C\\D\\E\\F\\H\\I\\a.mp4"); // symbolic link's absolute path
Path relativeSrc = link.getParent().relativize(source); // relative path of original file from symbolic link

link.getParent().toFile().mkdirs(); // create the directory hierarchy if any folder is not available 
Files.createSymbolicLink(link, reativeSrc); // create symbolic link.

希望这会有所帮助 :)

1

使用Files.createSymbolicLink(destination, targetDirectory.relativize(targetfile));创建符号链接。


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