我不明白java.nio.file.Files.isSameFile方法与java.nio.file.Path.equals方法有何不同。

有人能告诉他们有什么不同吗?

#1楼 票数:18 已采纳

他们有很大的不同。

例如:

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是否指向同一文件系统资源。

#2楼 票数:2

  • 如果equal() == trueisSameFile() == true
  • 如果isSameFile() == trueequal()并不总是true

isSameFile()方法首先检查Path对象是否等于equal() ,如果是,它将自动返回true而不检查是否存在任何文件。

如果Path对象的equals()比较返回false,则它将在文件系统中找到该路径引用的每个文件,并确定它们是否相同,如果两个文件都不存在,则抛出一个checked IOException

#3楼 票数:0

isSameFile来自java.nio.file.Files,而Path.equals来自java.nio.file.Path

isSameFile->测试两个路径是否找到同一文件。 即)检查两个Path对象是否对于同一文件等于->测试此路径是否与给定对象相等。

#4楼 票数:0

java.nio.file.Files.isSameFile()检查两个文件路径是否指向同一个文件=即都是硬链接(这对于所有操作系统和文件系统都是可移植的(是))。 此方法也遍历符号链接,然后您可以将两个符号链接与指向文件名的指向在UNIX文件系统/ Windows NTFS上相同inode的符号进行比较。

您可以查找(不可编辑)文件重复项(具有相同的大小和内容),确定是否是软链接/硬链接,如果不是,则可以-您可以先保存路径名并删除,然后再创建第二个链接。 您可以节省50%的磁盘空间。

  ask by translate from so

未解决问题?本站智能推荐:

1回复

如何在Java 7 java.nio.file.Path中访问子文件/文件夹?

Java 7引入了java.nio.file.Path作为java.io.File的可能替代品 。 使用File,当我访问特定的文件时,我会这样做: 使用Path的方法是什么? 我认为这会起作用: 但调用parent.toString()似乎很难看。 有没有更好的办
1回复

java.nio.files.StandardWatchEventKinds.ENTRY_MODIFY是否不报告文件内容更改?

下面的代码演示了该问题:用于监视文件更改的Java 7接口报告文件的打开,但不报告内容的实际更改。 有没有办法检测内容变化? 我的程序需要尽快阅读新内容。 事件侦听器报告的唯一长度是0(打开文件后立即显示)。 重现该问题的可编译源: 在Java(TM)SE运行时环境(
2回复

使用Java 7 nio读写文件

我有包含数组中的json元素的文件。 (几个文件。每个文件都有json元素数组) 我有一个知道将每个json元素作为文件中的一行进行处理的过程。 因此,我创建了一个读取JSON数组的小程序,然后将元素写入另一个文件。 该实用程序的输出将是其他进程的输入。 我使用了Java
4回复

jar中的Java访问文件导致java.nio.file.FileSystemNotFoundException

在尝试使用我的java应用程序将jar文件中的某些文件复制到临时目录时,会抛出以下异常: 这是我的setupTempFiles一小部分(带行号): webViewPresentation目录位于我的jar的根目录中: 当我将我的应用程序打包为jar时,此问题才会退出,在E
1回复

nio 包中的 java.io.InputStream#available() 方法等效

类FileInputStream有一个方法available()返回要消耗的剩余大小 我正在尝试将使用FileInputStream的程序转换为使用FileChannel ,我知道我们可以使用ByteBuffer使用FileChannel ,但我想知道如何从FileChannel获取剩余的字节,是否
1回复

如何在android中使用java.nio.file包?

我想使用java.nio.file API为Android创建一个文件管理器应用程序,它是JDK7的一部分。 我认为这个(java.noi.file)API包含设计文件管理器应用程序的简单解决方案,其中JDK6(IO)和apache commons IO API没有相同的功能。 请给出一
1回复

(Java 7 NIO.2)监视服务线程的自定义名称

在创建这样的监视服务时,在Java 7中使用nio.2: 然后,启动后台线程,在无限循环内轮询文件系统事件。 该线程的名称为“ Thread-n”,这在调查线程转储或进行性能分析会话时有点麻烦。 我们可以更改该线程的名称吗?
1回复

java.nio.file.FileAlreadyExistsException如何在java7中解决这个问题

我正在编写一个代码我用java nio api创建一个目录,我的代码片段是 但这是一个错误 java.nio.file.FileAlreadyExistsException: /home/ritesh/Desktop/userA 我知道的原因是因为一个目录已经具有相同的名称,