我正在尝试向文件写入一些内容,如下所示:
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/