java-executable jar-创建filewriter时出错:filenotfoundexception访问被拒绝

lfapxunr  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(475)

我有一个程序,其中有一个文件,我写的进展,我已经做了,所以如果程序关闭,我可以重新读取我已经做了什么。
因此,如果文件不存在(第一次启动程序时),我就创建它,然后写入它。
当我使用eclipse时,这项工作就完成了。但是由于我导出到一个可执行jar,如果文件已经存在,我就有一个错误!也就是说,我可以创建文件并在第一次写入它,但如果我关闭并重新启动程序则不行。
代码如下:

  1. String donePath = "./done.txt";
  2. try {
  3. File doneFile = new File(donePath);
  4. doneFile.createNewFile();
  5. allreadyDone = new ArrayList<String>(Arrays.asList(new String(
  6. Files.readAllBytes(Paths.get(donePath))).split("\n")));
  7. doneFileWriter = new FileWriter(donePath, true);
  8. } catch (IOException e1) {
  9. e1.printStackTrace();
  10. }

我得到了:

  1. java.io.FileNotFoundException: .\done.txt (Accès refusé)
  2. at java.base/java.io.FileOutputStream.open0(Native Method)
  3. at java.base/java.io.FileOutputStream.open(FileOutputStream.java:292)
  4. at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:235)
  5. at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:156)
  6. at java.base/java.io.FileWriter.<init>(FileWriter.java:82)
  7. at =============.Main.main(Main.java:51)
ve7v8dk2

ve7v8dk21#

您需要将createnewfile()放在if语句中,这样,如果成功地创建了它,它就会继续,如果不成功,它只会输出“file already exists”。

  1. try {
  2. File myObj = new File(filename);
  3. if (myObj.createNewFile()) {
  4. System.out.println("File created: " + myObj.getName());
  5. } else {
  6. System.out.println("File already exists.");
  7. }
  8. } catch (IOException e) {
  9. System.out.println("An error occurred.");
  10. e.printStackTrace();
  11. }
myss37ts

myss37ts2#

我用扩展的
打印已完成的工作
写东西(当前时间)
刷新并关闭donefilewriter的finally块。
最后一个街区一切正常。没有finally块,实际上什么也写不出来。
我希望“acc”ès拒绝é" 如果日志文件已打开(由其他运行示例打开)。或者,如果您首先与一个拥有日志文件的用户一起运行代码。然后为下一次运行使用另一个没有写访问权限的用户。
您使用相当现代的java.nio.path。因此,我建议进行一些类型更改和调试输出:

  1. Path donePath = Paths.get("./done.txt");
  2. try {
  3. File doneFile = donePath.toFile();
  4. UserPrincipal owner = Files.getOwner(donePath);
  5. String permissions = PosixFilePermissions.toString(
  6. Files.getPosixFilePermissions(donePath));
  7. System.out.println(
  8. String.format("abs path:%s, owner:%s, can write:%b, permissions:%s",
  9. doneFile.getAbsolutePath(), owner.getName(),
  10. doneFile.canWrite(), permissions));
  11. allreadyDone = new ArrayList<String>(Arrays.asList(new String(
  12. Files.readAllBytes(donePath)).split("\n")));

你用什么操作系统?哪个java实现(供应商/版本)?你的调试输出是什么?

展开查看全部

相关问题