在 Java 中使用 filewriter 打开文件时出现 java.io.FileNotFoundException

标签 java filenotfoundexception

我正在尝试向文件写入一些内容,如下所示:

FileWriter fw = new FileWriter("somefile.txt", true);

当由单个进程启动时它可以正常工作。像这样:

java -jar XXXXXXX.jar

但是当其他进程调用它时,会抛出IOException。示例:

java.io.FileNotFoundException: 'somefile.txt' (No such file or directory)
    at java.io.FileOutputStream.openAppend(Native Method)                      
    at java.io.FileOutputStream.<init>(FileOutputStream.java:192)              
    at java.io.FileOutputStream.<init>(FileOutputStream.java:116)             
    at java.io.FileWriter.<init>(FileWriter.java:61)                       

最佳答案

许多答案错误地表明您的异常发生是因为该文件不存在。原因并非如此; documentation for the constructor明确指出:

Throws:
IOException - if the named file exists but is a directory rather than a regular file, does not exist but cannot be created, or cannot be opened for any other reason

如果您传递相对文件名(其中不包含“/”或“\”的字符串),则它指的是当前目录中的文件。我猜测当您使用 java -jar 运行它时,您的当前目录是您具有写入权限的目录,但是当其他进程运行它时,当前目录不可写。

过去,旧的 Java 版本在尝试写入不可写的目录时有抛出 FileNotFoundException 的习惯。不过,最新的 Java 似乎并没有做到这一点,所以我不确定这是否是问题所在。您可以使用 java.nio.file 包来获得更清晰的异常:

Path path = Paths.get("somefile.txt");
Writer writer = Files.newBufferedWriter(path, Charset.defaultCharset(),
    StandardOpenOption.APPEND, StandardOpenOption.CREATE);

关于在 Java 中使用 filewriter 打开文件时出现 java.io.FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15633692/

相关文章:

java - 在 Java 中,为什么 FileWriter 抛出 IOException 而 FileOutputStream 抛出 FileNotFoundException 的原因完全相同

java - 使用 javax.json.stream.JsonParser 和 Java 流解析的 JSON 字符串值的额外引号

Java : PDF page preview error, 预期外部参照

java - Android:应用程序重新启动时下载的文件被删除

java - 在 Java 中读取 .txt 文件时出现问题

java - java中的FileNotFoundException

java - FileNotFoundException - 进程无法访问文件

java - 来自一个连接表的多个@ManyToMany 集

java - 如何从Spring Boot连接在线MongoDB数据库?

java okhttp使用for循环动态添加 header