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