基于Java Doc,如果链接已存在,它将抛出FileAlreadyExistsException。但是在实际测试中,当运行跟随两行时,它们都返回“/ tmp / ln1”并且不会抛出任何异常。并且“ln1”仍然指向“/ tmp / dir1”。似乎这种行为不遵循文档。这是一个JDK错误? 有没有办法覆盖旧链接?就像命令行的作用一样: ln -nfs from to
Files.createSymbolicLink(Paths.get("/tmp/ln1"), Paths.get("/tmp/dir1"))
Files.createSymbolicLink(Paths.get("/tmp/ln1"), Paths.get("/tmp/dir2"))
答案 0 :(得分:3)
我使用的是JDK 1.7。操作系统是Linux。我尝试这两个语句,它根据第一个语句创建一个符号链接,然后抛出一个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();
}
}
}