java - Files.newInputStream 中的 NoSuchFileException 与 StandardOpenOption.CREATE

标签 java nio

我正在尝试打开文件进行读取或创建文件(如果文件不存在)。 我使用这段代码:

String location = "/test1/test2/test3/";
new File(location).mkdirs();
location += "fileName.properties";
Path confDir = Paths.get(location);
InputStream in = Files.newInputStream(confDir, StandardOpenOption.CREATE);
in.close();

然后我得到 java.nio.file.NoSuchFileException

考虑到我正在使用 StandardOpenOption.CREATE 选项,如果该文件不存在,则应该创建该文件。

知道为什么我会收到此异常吗?

最佳答案

您似乎希望发生两个完全不同的事情之一:

  1. 如果文件存在,则读取;或
  2. 如果文件不存在,则创建它。

这两件事是相互排斥的,但你似乎混淆了它们。如果该文件不存在而您刚刚创建了它,那么读取它就没有意义。因此,请将两件事分开:

    Path confDir = Paths.get("/test1/test2/test3");
    Files.createDirectories(confDir);
    Path confFile = confDir.resolve("filename.properties");

    if (Files.exists(confFile))
        try (InputStream in = Files.newInputStream(confFile)) {
            // Use the InputStream...
        }
    else
        Files.createFile(confFile);

另请注意,最好使用“try-with-resources”而不是手动关闭 InputStream。

关于java - Files.newInputStream 中的 NoSuchFileException 与 StandardOpenOption.CREATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40730382/

相关文章:

java - 一个线程中对非 volatile 成员变量的赋值是否保证在另一个线程中可见?

java - 尝试运行 Maven 项目时出现错误

java - 为什么这个lambda表达式可以分配给不同的函数接口(interface)呢?

java - 文件遍历不返回绝对路径,仅返回文件名

tomcat - Jersey 的 NIO 支持

java - 可重入锁 - 可能的输出?

java - 是什么导致了 ArrayIndexOutOfBoundsException?

java - 我可以相信 Files 中的方法会在预期时抛出 NoSuchFileException 吗?

java - 输入流readUTF无法读取UTF

java - 在没有显式取消 key 的情况下获取 java.nio.channels.CancelledKeyException