我有一个程序,其中有一个文件,我写的进展,我已经做了,所以如果程序关闭,我可以重新读取我已经做了什么。
因此,如果文件不存在(第一次启动程序时),我就创建它,然后写入它。
当我使用eclipse时,这项工作就完成了。但是由于我导出到一个可执行jar,如果文件已经存在,我就有一个错误!也就是说,我可以创建文件并在第一次写入它,但如果我关闭并重新启动程序则不行。
代码如下:
String donePath = "./done.txt";
try {
File doneFile = new File(donePath);
doneFile.createNewFile();
allreadyDone = new ArrayList<String>(Arrays.asList(new String(
Files.readAllBytes(Paths.get(donePath))).split("\n")));
doneFileWriter = new FileWriter(donePath, true);
} catch (IOException e1) {
e1.printStackTrace();
}
我得到了:
java.io.FileNotFoundException: .\done.txt (Accès refusé)
at java.base/java.io.FileOutputStream.open0(Native Method)
at java.base/java.io.FileOutputStream.open(FileOutputStream.java:292)
at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:235)
at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:156)
at java.base/java.io.FileWriter.<init>(FileWriter.java:82)
at =============.Main.main(Main.java:51)
2条答案
按热度按时间ve7v8dk21#
您需要将createnewfile()放在if语句中,这样,如果成功地创建了它,它就会继续,如果不成功,它只会输出“file already exists”。
myss37ts2#
我用扩展的
打印已完成的工作
写东西(当前时间)
刷新并关闭donefilewriter的finally块。
最后一个街区一切正常。没有finally块,实际上什么也写不出来。
我希望“acc”ès拒绝é" 如果日志文件已打开(由其他运行示例打开)。或者,如果您首先与一个拥有日志文件的用户一起运行代码。然后为下一次运行使用另一个没有写访问权限的用户。
您使用相当现代的java.nio.path。因此,我建议进行一些类型更改和调试输出:
你用什么操作系统?哪个java实现(供应商/版本)?你的调试输出是什么?