java中的硬鏈接和軟鏈接都是文件系統(tǒng)中的鏈接方式,可以使得一個(gè)文件同時(shí)存在于不同的目錄中。不過(guò)它們兩者具有著不同的特點(diǎn)。
硬鏈接是指在文件系統(tǒng)中給定一個(gè)額外的文件名鏈接到同一個(gè)文件內(nèi)容。即兩個(gè)文件名指向同一個(gè)inode。因此,如果其中一個(gè)文件名被刪除了,文件仍然能夠存在于磁盤(pán)中,因?yàn)檫€有其他鏈接指向該文件。對(duì)于硬鏈接而言,刪除一個(gè)鏈接和刪除文件本身是一樣的效果。
//創(chuàng)建硬鏈接 Path link = Paths.get("/path/to/link"); Path target = Paths.get("/path/to/target"); Files.createLink(link, target); //判斷是否為硬鏈接 Path path1 = Paths.get("/path/to/link"); Path path2 = Paths.get("/path/to/target"); System.out.println(Files.isSameFile(path1, path2)); //true
軟鏈接是指在文件系統(tǒng)中創(chuàng)建一個(gè)指向另一個(gè)文件的鏈接,即一個(gè)新的文件名,指向的是原文件名的路徑。與硬鏈接不同的是,軟鏈接是指向文件名的路徑,而不是文件內(nèi)容。如果原文件被刪除,軟鏈接就無(wú)法訪(fǎng)問(wèn)。但軟鏈接可以指向一個(gè)不存在的文件,并不需要原文件存在。
//創(chuàng)建軟鏈接 Path link = Paths.get("/path/to/link"); Path target = Paths.get("/path/to/target"); Files.createSymbolicLink(link, target); //判斷是否為軟鏈接 Path path1 = Paths.get("/path/to/link"); Path path2 = Paths.get("/path/to/target"); System.out.println(Files.isSymbolicLink(path1)); //true System.out.println(Files.isSameFile(path1, path2)); //false
硬鏈接和軟鏈接各自具有特別的作用。在使用時(shí)需要根據(jù)具體情況選擇使用哪種鏈接方式。