web-dev-qa-db-fra.com

Obtenir "Java.nio.file.AccessDeniedException" lors d'une tentative d'écriture dans un dossier

Pour une raison quelconque, je continue à obtenir Java.nio.file.AccessDeniedException chaque fois que j'essaie d'écrire dans un dossier de mon ordinateur à l'aide d'une application Web Java sur Tomcat. Les autorisations de ce dossier sont définies sur un contrôle total pour tous les utilisateurs de mon ordinateur (Windows). Est-ce que quelqu'un sait pourquoi je reçois cette exception?

Voici mon 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();
    }

Et voici l'erreur:

Exception: Java.nio.file.AccessDeniedException: C:\safesite_documents\site1 Java.nio.file.AccessDeniedException: C:\safesite_documents\site1 sur Sun.nio.fs.WindowsException.translateToIOException (WindowsException.Java:83) à Sun.nio.fs.WindowsException.rethrowAsIOException (WindowsException.Java:97) sur Sun.nio.fs.WindowsException.rethrowAsIOException (WindowsException.Java:102) sur Sun.nio.fs.WindowsFileSystemProvider.newByteChannel (WindowsFileSystemProvider.Java:230) sur Java.nio.file.spi.FileSystemProvider.newOutputStream (FileSystemProvider.Java:430) sur Java.nio.file.Files.newOutputStream (Files.Java:172) sur Java.nio.file.Files.write (Files.Java:3092)

Raison possible: Voir mon article sur supersuser pour savoir comment je ne peux pas décocher "Lecture seule" pour aucun de mes dossiers sous Windows 7. Même si tous les dossiers ne sont lus que par Java.

40
OneTwo

Ok il s'avère que je faisais quelque chose de stupide. Je n'avais pas ajouté le nouveau nom de fichier au chemin.

J'ai eu

rootDirectory = "C:\\safesite_documents"

mais ça aurait dû être

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

Désolé, c'était une erreur stupide, comme toujours.

62
OneTwo

J'obtenais la même erreur en essayant de copier un fichier. Fermer un canal associé au fichier cible a résolu le problème.

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