java-使用StandardOpenOption.CREATE的Files.newInputStream中的NoSuchFileException

我正在尝试打开一个文件以进行读取或创建该文件(如果不存在).
我使用以下代码:

 

 

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选项,如果文件不存在,则应创建该文件.

知道为什么我会收到这个例外吗?

Inm小程序商店 | Vultr中文网

最佳答案

似乎您希望发生两种完全独立的事情之一:

 

>如果文件存在,请阅读;要么
>如果文件不存在,请创建它.

这两件事是互斥的,但是您似乎已经混淆了它们.如果文件不存在,而您刚刚创建了文件,则没有必要读取它.因此,请将这两件事分开:

 

    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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值