何らかの理由で、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. JavaでSun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.Java:102)でSun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.Java:230)でnio.fs.WindowsException.rethrowAsIOException(WindowsException.Java:97) .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のフォルダーの「読み取り専用」をオフにできない方法については、スーパーユーザーの投稿を参照してください。ただし、Java
わかりました、私は何か愚かなことをしていたことがわかりました。新しいファイル名をパスに追加していませんでした。
持っていた
rootDirectory = "C:\\safesite_documents"
しかし、それはあったはずです
rootDirectory = "C:\\safesite_documents\\newFile.jpg"
いつものように、それは愚かな間違いでした。
この質問に対する答えではありません
ファイルを削除したフォルダーを削除しようとしたときにこの例外が発生しました。
例:
createFolder("folder");
createFile("folder/file");
deleteFile("folder/file");
deleteFolder("folder"); // error here
deleteFile("folder/file");
は削除されたことを返しましたが、フォルダーはプログラムの再起動後にのみ空と見なされます。
一部のオペレーティングシステムでは、このJava仮想マシンまたは他のプログラムで開いて使用中のファイルを削除できない場合があります。
https://docs.Oracle.com/javase/8/docs/api/Java/nio/file/Files.html#delete-Java.nio.file.Path-
ファイルをコピーしようとしたときに同じエラーが表示されました。ターゲットファイルに関連付けられているチャネルを閉じると、問題は解決しました。
Path destFile = Paths.get("dest file");
SeekableByteChannel destFileChannel = Files.newByteChannel(destFile);
//...
destFileChannel.close(); //removing this will throw Java.nio.file.AccessDeniedException:
Files.copy(Paths.get("source file"), destFile);