我创建了一个包含文件列表的symbolic文件夹。有没有办法用java把符号链接转换成HardLink?
发布于 2016-12-05 15:53:43
要使用java创建硬链接,您可以使用:
Path newLink = ...;
Path existingFile = ...;
try {
Files.createLink(newLink, existingFile);
} catch (IOException x) {
System.err.println(x);
} catch (UnsupportedOperationException x) {
// Some file systems do not
// support adding an existing
// file to a directory.
System.err.println(x);
}因此,在本例中,newLink应该是您创建的oldSymbolicLink,而existingFile代表它的目标。
要获取符号链接的目标,可以使用
Files.readSymbolicLink(oldSymbolicLink));甲骨文文档: Links, Symbolic or Otherwise
发布于 2016-12-05 16:51:14
正如其他人指出的那样,Java doc表示不能创建目录上的硬链接。所以,我不会告诉你如何创建到目录的硬链接,而是解释为什么你不能在目录上创建硬链接。
当您尝试遍历目录树时,目录上的硬链接可能会导致循环。
例如,如果您有一个目录/foo/bar和一个指向../bar的符号链接/foo/bar/baz,当您尝试遍历此树时,您将陷入无限循环。
/foo/
/foo/bar
/foo/bar/baz
/foo/bar/baz/bar
/foo/bar/baz/bar/baz
...现在,如果baz是到../bar的符号链接,那么可以通过使用unlink(2)系统调用取消链接baz来修复它(因为取消链接不遵循符号链接)。然而,如果baz是一个硬链接,那么它将会有很多harder (没有双关语)来修复这个问题。在“Unix环境中的高级编程”一书中,Stephen Rago指出,Rich Stephen在尝试这个实验时损坏了他的文件系统( fsck无法恢复它)
https://stackoverflow.com/questions/40969248
复制相似问题