2015-10-21 171 views
0

基于Java文件,它会抛出FileAlreadyExistsException如果链接已经存在。但在实际测试中,当运行遵循两行时,它们都返回“/ tmp/ln1”,并且不会抛出异常。而“ln1”仍然指向“/ tmp/dir1”。似乎这种行为不遵循文档。这是一个JDK错误? 有没有办法重写旧的链接?像有什么命令行所做的: LN从到Files.createSymbolicLink()(java.nio.file)不会覆盖现有的符号链接,并不会引发异常

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

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

抛出一个'FileAlreadyExistsException'对我来说:

如果你想覆盖旧的链接,你应该创建一个新的链接,如在此之前删除旧的链接。 –

+0

是的,你首先删除旧的链接。 ---另外,你在什么平台(OS)上,以及你在使用哪个JDK? – Andreas

回答

1

我使用JDK 1.7 -nfs。操作系统是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(); 
     } 
    } 
}