Aus irgendeinem Grund bekomme ich immer Java.nio.file.AccessDeniedException
, wenn ich versuche, in einem Ordner auf meinem Computer mit einer Java-Webapp auf Tomcat zu schreiben. Für diesen Ordner sind Berechtigungen für alle Benutzer auf meinem Computer (Windows) festgelegt. Weiß jemand, warum ich diese Ausnahme bekomme?
Hier ist mein Code:
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();
}
Und hier ist der Fehler:
Ausnahme: Java.nio.file.AccessDeniedException: C:\safesite_documents\site1 Java.nio.file.AccessDeniedException: C:\safesite_documents\site1 um Sun.nio.fs.WindowsException.translateToIOException (WindowsException.Java:83) um 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) in Java.nio.file.Files.write (Files.Java:3092)
Ok, es stellt sich heraus, dass ich etwas Dummes gemacht habe. Ich hatte den neuen Dateinamen nicht an den Pfad angehängt.
Ich hatte
rootDirectory = "C:\\safesite_documents"
aber es hätte sein sollen
rootDirectory = "C:\\safesite_documents\\newFile.jpg"
Entschuldigung, es war wie immer ein dummer Fehler.
Nicht die Antwort auf diese Frage
Ich habe diese Ausnahme beim Versuch, einen Ordner zu löschen, in dem ich die Datei gelöscht habe.
Beispiel:
createFolder("folder");
createFile("folder/file");
deleteFile("folder/file");
deleteFolder("folder"); // error here
Während deleteFile("folder/file");
zurückgab, dass es gelöscht wurde, wird der Ordner erst nach dem Neustart des Programms als leer betrachtet.
Auf einigen Betriebssystemen ist es möglicherweise nicht möglich, eine Datei zu entfernen, wenn diese geöffnet ist und von dieser Java virtuellen Maschine oder anderen Programmen verwendet wird.
https://docs.Oracle.com/javase/8/docs/api/Java/nio/file/Files.html#delete-Java.nio.file.Path-
Beim Kopieren einer Datei wurde dieselbe Fehlermeldung angezeigt. Das Schließen eines mit der Zieldatei verknüpften Kanals löste das Problem.
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);