gpt4 book ai didi

Java NIO Files.createFile() 失败并出现 NoSuchFileException

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:11:52 52 4
gpt4 key购买 nike

我正在尝试在开发-测试-产品设置中放置一些核心文件。基本上,如果文件较新,则需要将其复制到下一级作为 QA 流程的一部分。

我正在使用 Java 8,所以我决定第一次尝试 NIO 文件/路径 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() 调用(阅读了文件的 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)
...

我做错了什么?

最佳答案

Files.copy()(和 Files.move())是“愚蠢的”;它不会尝试执行以下任何操作:

  • 复制整个目录层次结构;
  • 移动整个目录层次结构(如果源和目标在不同的文件系统上);
  • 创建丢失的目录等

你需要做的:

final Path tmp = out.getParent();
if (tmp != null) // null will be returned if the path has no parent
Files.createDirectories(tmp);

在复制文件之前。

关于Java NIO Files.createFile() 失败并出现 NoSuchFileException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27335005/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com