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