gpt4 book ai didi

java - Files.createSymbolicLink() (java.nio.file) 不会覆盖现有的符号链接(symbolic link)并且不会抛出异常

转载 作者:行者123 更新时间:2023-11-29 04:57:25 25 4
gpt4 key购买 nike

根据 Java Doc,如果链接已经存在,它将抛出 FileAlreadyExistsException。但在实际测试中,按照两行运行时,均返回“/tmp/ln1”,并没有抛出异常。而“ln1”仍然指向“/tmp/dir1”。似乎此行为不遵循文档。这是一个 JDK 错误?有没有办法覆盖旧链接?就像命令行的作用一样:ln -nfs 从到

Files.createSymbolicLink(Paths.get("/tmp/ln1"), Paths.get("/tmp/dir1"))

Files.createSymbolicLink(Paths.get("/tmp/ln1"), Paths.get("/tmp/dir2"))

最佳答案

我使用 JDK 1.7。操作系统是Linux。我尝试了这两个语句,它根据第一个语句创建了一个符号链接(symbolic link),然后抛出一个 FileAlreadyExistsException 以执行第二个语句。

如果你想覆盖旧链接,你应该在创建新链接之前删除旧链接,如下所示:

public class Test {
public static void main(String[] args) throws IOException {
String link = "/tmp/ln1";
// create first symbolic link
deleteIfExists(link);
Files.createSymbolicLink(Paths.get(link), Paths.get("/tmp/dir1"));
//create second symbolic link
deleteIfExists(link);
Files.createSymbolicLink(Paths.get(link), Paths.get("/tmp/dir2"));
}

private static void deleteIfExists(String filePath) {
File file = new File(filePath);
if(file.exists()) {
file.delete();
}
}
}

关于java - Files.createSymbolicLink() (java.nio.file) 不会覆盖现有的符号链接(symbolic link)并且不会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33250193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com