2015-03-31 85 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%的磁盘空间。