1

是否可以在java中复制符号链接...基本上我想要的是只复制不包含文件的符号链接,其中符号链接指向..

4

4 回答 4

2

我没有尝试过,但我认为您可以在使用 Files.copy 时使用 LinkOption.NOFOLLOW_LINKS (Java SE 7)

http://docs.oracle.com/javase/7/docs/api/java/nio/file/LinkOption.html

于 2012-09-28T12:45:11.813 回答
2

我明白了..首先我需要确定它是符号链接吗

Path file = ...;
boolean isSymbolicLink =
    Files.isSymbolicLink(file);

然后我可以在目的地创建相同的符号链接

    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);
}
于 2012-09-28T12:58:51.937 回答
1

你当然可以这样做。从类 Files 中检查方法 copy(Path source, Path target, CopyOption... options)。将 LinkOption.NOFOLLOW_LINKS 指定为复制选项将使复制方法执行您想要的操作。

在使用此处演示的链接时,此行为是普遍的:

Path target = Paths.get("c://a.txt");
Path symbolicLink = Paths.get("c://links//symbolicLink.txt");

// creates test link
Files.createSymbolicLink(symbolicLink, target);

BasicFileAttributes targetAttributes = Files.readAttributes(symbolicLink, BasicFileAttributes.class);
BasicFileAttributes linkAttributes = Files.readAttributes(symbolicLink, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS);

System.out.println("File attribute - isSymbolicLink\tTarget: " + targetAttributes.isSymbolicLink() + "\t\t\t\tLink: " + linkAttributes.isSymbolicLink());
System.out.println("File attribute - size\t\tTarget: " + targetAttributes.size() + "\t\t\t\tLink: " + linkAttributes.size());
System.out.println("File attribute - creationTime:\tTarget: " + targetAttributes.creationTime() + "\tLink: " + linkAttributes.creationTime());

此代码输出:

File attribute - isSymbolicLink: Target: false                        Link: true
File attribute - size:           Target: 8556                         Link: 0
File attribute - creationTime:   Target: 2013-12-08T16:43:19.55401Z   Link: 2013-12-14T16:09:17.547538Z

您可以访问我的帖子以获取有关NIO.2 中链接的更多信息

于 2014-01-08T21:06:40.613 回答
0

来自本页描述的框中的 JRE 中可用的符号链接的所有可能操作

于 2012-09-28T12:42:27.960 回答