2015-03-31 46 views
0

我無法理解java.nio.file.Files.isSameFile方法與java.nio.file.Path.equals方法的不同之處。Java NIO - Files.isSameFile與Path.equals的不同之處

請問有人能告訴他們他們有什麼不同嗎?

+0

'java.nio.file.Path.isSameFile'不存在。你的意思[java.nio.file.Files.isSameFile(http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#isSameFile(java.nio.file 。路徑,%20java.nio.file.Path))? – 2015-03-31 12:12:39

+0

是的。你是對的。哦,這使得這個問題無效。請求刪除此問題。 – 2015-03-31 12:17:24

+0

你可以編輯它並修復這個錯誤 – fge 2015-03-31 12:19:07

回答

7

他們是非常不同的。

例如:

final Path p1 = Paths.get("/usr/src"); 
final Path p2 = Paths.get("/usr/../usr/src"); 

p1.equals(p2); // FALSE 
Files.isSameFile(p1, p2); // true 

final Path p1 = fs1.getPath("/usr/src"); 
final Path p2 = fs2.getPath("/usr/src"); 

p1.equals(p2); // FALSE 

Path等於另一個Path當且僅當:

  • 它們具有相同的FileSystem;
  • 它們具有相同的根元素;
  • 它們具有相同的名稱元素。

這是Files.isSameFile()很大的不同,其訪問文件系統和嘗試,看看如果兩個Path的立場給同一個文件系統資源。

+0

好的。所以等於只是一個平等的檢查其字符串表示,是否正確? – 2015-03-31 12:14:59

+0

不需要。再次閱讀答案。 – fge 2015-03-31 12:16:24

+0

好的。瞭解。謝謝。 – 2015-03-31 13:27:36

1

isSameFile是從java.nio.file.Files和Path.equals是從java.nio.file.Path

isSameFile - >測試兩個路徑定位相同的文件。 ie)檢查兩個Path對象是否爲同一個文件 equals - >測試此路徑是否與給定對象相等。

+0

你是對的,這使得我的問題變得無效。我已要求刪除該問題。感謝您的回答。 – 2015-03-31 12:22:35

1
  • 如果equal() == true然後isSameFile() == true
  • 如果isSameFile() == trueequal()並不總是true

isSameFile()方法首先檢查Path對象是在equal()方面相等,並且如果是的話,它會自動返回如果沒有檢查是否存在任何文件,則爲true。

如果Path對象equals()比較返回假,那麼它定位於每一個所述路徑是指在文件系統中,並且確定它們是相同的,投擲checked IOException如果任一文件不存在的文件。

0

java.nio.file.Files.isSameFile()檢查兩個文件路徑是否指向同一個文件=即兩個都是硬鏈接(這對所有操作系統和文件系統都是可移植的(是的))。此方法也遍歷符號鏈接,然後您可以比較兩個符號鏈接到文件名指向unix文件系統/ Windows NTFS上的同一個inode。

你可以找到(不可編輯)文件複製(這同樣大小和內容),確定是否是軟/硬鏈接,然後如果沒有 - 你可以保存路徑和刪除第一,然後創建鏈接到第二個。您可以節省50%的磁盤空間。