Je prends "java".nio.fichier.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 sur mon ordinateur en utilisant une webapp java sur Tomcat. Ce dossier a les permissions définies au contrôle complet pour tout le monde sur mon ordinateur (Windows). Quelqu'un sait pourquoi j'ai 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.fichier.AccessDeniedException: C:safesite_documentssite1 Java.nio.fichier.AccessDeniedException: C:safesite_documentssite1 au coucher du soleil.nio.fs.WindowsException.translateToIOException (WindowsException.java: 83) au coucher du soleil.nio.fs.WindowsException.rethrowAsIOException (WindowsException.java: 97) au coucher du soleil.nio.fs.WindowsException.rethrowAsIOException (WindowsException.java: 102) au coucher du soleil.nio.fs.WindowsFileSystemProvider.newByteChannel (WindowsFileSystemProvider.java: 230) à Java.nio.fichier.le spi.FileSystemProvider.newOutputStream (FileSystemProvider.java: 430) à java.nio.fichier.Fichier.newOutputStream (Files.java: 172) à java.nio.fichier.Fichier.écrire(des Fichiers.java: 3092)

raison Possible: Voir mon message sur supersuser sur comment je ne peux pas décocher "lire seulement" pour l'un de mes dossiers sur windows 7. Même si tous les dossiers ne sont pas lus que vers java.

36
demandé sur Serban Petrescu 2015-02-23 12:32:26

2 réponses

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

j'avais

rootDirectory = "C:\safesite_documents"

mais ça aurait dû être

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

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

54
répondu OneTwo 2018-10-02 13:17:55

j'ai eu 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
répondu Nwafor-Orizu Chaluchukwu 2018-08-27 12:11:29