尝试写入文件夹时出现“java.nio.file.AccessDeniedException”

新手上路,请多包涵

出于某种原因,每次我尝试使用 Tomcat 上的 java webapp 写入计算机上的文件夹时,我都会不断收到 java.nio.file.AccessDeniedException 。此文件夹的权限设置为对我计算机上的每个人 (Windows) 进行完全控制。有人知道我为什么会得到这个例外吗?

这是我的代码:

 public void saveDocument(String name, String siteID, byte doc[]) {
    try {
        Path path = Paths.get(rootDirectory + siteID);
        if (Files.exists(path)) {
            System.out.println("Exists: " + path.toString());
            Files.write(path, doc);
        } else {
            System.out.println("DOesn't exist");
            throw new Exception("Directory for Site with ID " + siteID + "doesn't exist");
        }
    } catch (FileSystemException e) {
        System.out.println("Exception: " + e);
        e.printStackTrace();
    } catch (IOException e ) {
        System.out.println("Exception: " + e);
        e.printStackTrace();
    } catch (Exception e) {
        System.out.println("Exception: " + e);
        e.printStackTrace();
    }

这是错误:

异常:java.nio.file.AccessDeniedException: C:\safesite_documents\site1 java.nio.file.AccessDeniedException: C:\safesite_documents\site1 at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:83) at sun。 nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97) 在 sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102) 在 sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:230) 在 java .nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:430) 在 java.nio.file.Files.newOutputStream(Files.java:172) 在 java.nio.file.Files.write(Files.java:3092) )

可能的原因: 请参阅我在 supersuser 上的帖子,了解我如何无法取消选中 Windows 7 上任何文件夹的“只读”。即使所有文件夹都不是只读到 java 之外的任何文件夹。

原文由 OneTwo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 6.5k
2 个回答

好吧,事实证明我在做一些愚蠢的事情。我没有将新文件名附加到路径中。

我有

rootDirectory = "C:\\safesite_documents"

但它应该是

rootDirectory = "C:\\safesite_documents\\newFile.jpg"

对不起,这是一个愚蠢的错误。

原文由 OneTwo 发布,翻译遵循 CC BY-SA 4.0 许可协议

获取 java.nio.file.AccessDeniedException 尝试写入文件夹时

不明显的是,Comodo 防病毒软件有一个“自动遏制”设置,也可能导致这个确切的错误。 (例如,用户可以写入某个位置,但 java.exejavaw.exe 进程不能)。

在这种极端情况下,为进程和/或文件夹添加例外应该会有所帮助。

暂时禁用防病毒功能将有助于了解 Comodo AV 是否是罪魁祸首。

我发布这个不是因为我使用或更喜欢 Comodo,而是因为它对于一个正常运行的 Java 应用程序来说是一个非常不明显的症状,并且可能会花费很多时间来解决文件权限问题,这些文件权限是正常和正确的,但被第 3 方应用程序阻止了。

原文由 tresf 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题