1. ホーム
  2. java

[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件

2022-01-31 22:43:21

質問

なぜか java.nio.file.AccessDeniedException Tomcat上のJavaウェブアプリケーションを使用して、私のコンピュータ上のフォルダに書き込もうとするたびに。このフォルダーは、私のコンピューター(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 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)

考えられる理由 Windows 7でどのフォルダも「読み取り専用」のチェックを外すことができないという、supersuserへの私の投稿をご覧ください。java以外のフォルダは読み取り専用になっていないにもかかわらずです。

どうすればいいですか?

OK、それは私が何か愚かなことをしていたことが判明しました。新しいファイル名をパスに追加していなかったのです。

私は

rootDirectory = "C:\\safesite_documents"

となっていますが、本来は

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

相変わらずのバカミスですみません。