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

2022-08-31 13:22:55

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

这是我的代码:

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();
    }

这是错误:

Exception: 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) at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102) at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:230) at java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:430) at java.nio.file.Files.newOutputStream(Files.java:172) at java.nio.file.Files.write(Files.java:3092)

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


答案 1

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

我有

rootDirectory = "C:\\safesite_documents"

但它应该是

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

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


答案 2

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

显然,Comodo防病毒软件具有“自动包含”设置,也可能导致此确切错误。(例如,用户可以写入某个位置,但 和 进程不能)。java.exejavaw.exe

在此边缘情况下,为进程和/或文件夹添加异常应该会有所帮助。

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

我发布这篇文章不是因为我使用或更喜欢Comodo,而是因为它对其他功能正常的Java应用程序来说是一个非常不明显的症状,并且可能会花费数小时对文件权限进行故障排除,这些权限是理智和正确的,但被第三方应用程序阻止。