【发布时间】:2014-12-06 18:31:46
【问题描述】:
我正在尝试在 dev-test-prod 设置中放置一些核心文件。基本上,如果文件较新,则需要将其复制到下一个级别,作为 QA 流程的一部分。
我使用的是 Java 8,所以我决定第一次尝试 NIO Files/Path api。我已经老了,已经编程了 48 年,并且自 1996 年初以来几乎完全使用 Java,并且自预发布以来的每个版本,所以这个 NIO“增强”对我来说应该不太难吸收,但是 . . .
FileSystem fs = FileSystems.getDefault();
Path in = fs.getPath(fromFileName);
Path out = fs.getPath(toFileName);
if (Files.exists(out)) {
FileTime inTime = Files.getLastModifiedTime(in);
FileTime outTime = Files.getLastModifiedTime(out);
if (0 > outTime.compareTo(inTime)) {
Files.copy(in, out, StandardCopyOption.REPLACE_EXISTING);
}
} else {
Files.createFile(out);
Files.copy(in, out);
}
我最初只是在没有 Files.createFile() 的情况下尝试了 Files.copy(),并在 copy() 调用中得到了 NoSuchFileException。
我查看了几篇 StackOverflow 帖子,其中提到了这一点,其中一篇权威地指出,如果目标文件不存在,则 copy() 将失败。对于我的生活,我无法理解为什么设计师认为这是一个好主意,但就这样吧。我相应地添加了上面的 createFile() 调用(已经阅读了 Files.createFile() 的 API 文档,它说 Files.createFile() “创建一个新的空文件,如果文件已经存在则失败。”当我再次运行它时,我得到了相同的异常,但在 createFile() 而不是 copy() 上。注意路径在我的 Windows 主目录内,因此不会出现拒绝访问的问题。此外,除了包含此项目的 Eclipse 之外,我的 PC 在这次。
java.nio.file.NoSuchFileException: C:\Users\ChrisGage\myproject\site\ttws\css\core.css
at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(Unknown Source)
at java.nio.file.Files.newByteChannel(Unknown Source)
at java.nio.file.Files.createFile(Unknown Source)
...
我做错了什么?
【问题讨论】:
-
可能是某个文件夹丢失,因此无法创建文件?