it-swarm.com.de

"Java.nio.file.AccessDeniedException" abrufen, wenn versucht wird, in einen Ordner zu schreiben

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)

Möglicher Grund warum: In meinem Beitrag über Supersuser erfahren Sie, wie ich das Kontrollkästchen "Schreibgeschützt" für keinen meiner Ordner unter Windows 7 deaktivieren kann. Obwohl alle Ordner nicht nur von Java gelesen werden können.

40
OneTwo

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.

62
OneTwo

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-

Erklärung von dhke

1
thiagola92

Löschen Sie Android-Ordner-Cache-Dateien. Löschen Sie auch den Build-Ordner manuell aus einem Verzeichnis und öffnen Sie Android studio und führen Sie es erneut aus.

enter image description here

1
vinod

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