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

One*_*Two 48 java io file-io access-denied

出于某种原因,java.nio.file.AccessDeniedException每次我尝试使用Tomcat上的java webapp写入计算机上的文件夹时,我都会收到这些信息.此文件夹的权限设置为对我计算机上的所有人(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();
    }
Run Code Online (Sandbox Code Playgroud)

这是错误:

异常: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.位于sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:230)的sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)中的nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97) .nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:430)位于java.nio.file.Files.write的java.nio.file.Files.newOutputStream(Files.java:172)中(Files.java:3092) )

可能的原因:在超级用户上看到我的帖子,关于如何取消选中Windows 7上我的任何文件夹的"只读".尽管所有文件夹都不是只读给java以外的任何文件夹.

One*_*Two 73

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

我有

rootDirectory = "C:\\safesite_documents"
Run Code Online (Sandbox Code Playgroud)

但应该是

rootDirectory = "C:\\safesite_documents\\newFile.jpg" 
Run Code Online (Sandbox Code Playgroud)

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

  • 这似乎是`java.nio.file.AccessDeniedException`的主要原因.有时很难调试,但是,如果你得到这个,你应该检查用`java`和你的配置文件设置的所有系统属性 (2认同)