2015-10-21 66 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(); 
     } 
    } 
}