【问题标题】:java.io.FileNotFoundException (Access is denied) - file.canWrite() does not workingjava.io.FileNotFoundException(访问被拒绝)-file.canWrite() 不起作用
【发布时间】:2015-02-10 15:33:33
【问题描述】:

我正在尝试清空 jasper 文件。在写之前,我检查了它的写权限,我告诉我我可以在上面写。但它以java.io.FileNotFoundException (Access is denied) - file.canWrite() 结束 我错过了什么?

        try {
                File f = new File("C:\\Program Files (x86)\\XXXXXX\\XXX\\X\\X.jrxml");
                if(f.canWrite()){
                    BufferedWriter bf = new BufferedWriter(new FileWriter(f));
                    bf.write("");
                    bf.close();
                }

    } catch (Exception e) {
        e.printStackTrace();
    }

【问题讨论】:

  • 您是否有权写入该目录?
  • 是的,我有权限。
  • 您是否交叉检查过其他进程是否仍在使用该文件?这可能是一个可能的原因。
  • 另外,您是否在 Windows 7 上运行?

标签: java permissions filenotfoundexception


【解决方案1】:

在您的 Program Files 文件夹中写入通常具有相当有限的访问权限,并且您通常必须使用管理员帐户才能这样做。我建议您尝试将您的 .jrxml 保存在 \\Program Files (x86) 之外更易于访问的目录中,例如您的 ApplicationData 文件夹,它甚至可能已经存在。

您也可以尝试使用独立存储之类的东西来确保您有权限, this 应该告诉你如何使用它。

【讨论】:

    【解决方案2】:

    显然,即使您不能在 Windows 上书写,canWrite 也可能返回 true(据此:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8060110)。 javadoc对此并不十分清楚。

    如果您至少使用 java 7,则可以尝试使用 Files.isWritable 来查看是否有预期的结果。否则,检查权限的唯一方法似乎是尝试编写,看看会发生什么。

    【讨论】:

      猜你喜欢
      • 2011-05-15
      • 2015-08-14
      • 1970-01-01
      • 2013-11-02
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多