【问题标题】:What happens when I copy two empty paths and why doesn't it throw an exception?当我复制两个空路径时会发生什么,为什么不抛出异常?
【发布时间】:2011-10-13 11:33:13
【问题描述】:

我真的很想知道这段代码的作用:

scala> import java.nio.file._
import java.nio.file._

scala> Files.copy(Paths.get(""), Paths.get(""))
res0: java.nio.file.Path = 

不应该抛出NoSuchFileException吗?

阅读JavaDoc 会发现:

默认情况下,如果目标文件已经存在或者是 符号链接,除非源和目标是同一个文件,在 在这种情况下,该方法在不复制文件的情况下完成。

但我不确定这是不是真正的原因,因为 Files.copy(Paths.get("a"), Paths.get("a")) 按预期失败。

【问题讨论】:

  • 这个问题不是 Scala 特有的。我只是用它来展示代码和交互。

标签: java file path filesystems copy


【解决方案1】:

您可能需要检查 http://download.oracle.com/javase/7/docs/api/java/nio/file/Paths.html 以了解 paths.get 在提供空字符串(它会生成空路径)时的作用,并查看 http://download.oracle.com/javase/7/docs/api/java/nio/file/Path.html 以了解有关空路径的详细信息:

如果路径仅由一个路径组成,则该路径被认为是空路径 name 元素为空。使用空路径访问文件是 相当于访问文件系统的默认目录。

所以看起来您的代码正在获取一个有效的空路径,然后认为源和目标是相同的。

【讨论】:

  • 当它复制一个目录时,它会创建一个空目录,就像文档链接提到的那样。所以,实际上,它会在dest 中创建一个空目录
  • 不幸的是,我不是一个出色的 Java 专家。只是通过阅读文档,如果它比较两个复制参数以查看它们是否相同,然后它会执行任何开销显着增加的操作,例如查看文件系统,我不会感到惊讶。我只是想,如果它在 dest 中创建一个空目录,它将返回该路径,并且该路径不会为空。
猜你喜欢
  • 1970-01-01
  • 2010-12-12
  • 2011-03-25
  • 2011-03-20
  • 2011-05-07
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多