J'ai le code suivant avec la bibliothèque iText correctement intégrée.
import Java.io.*;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfWriter;
@org.Eclipse.jdt.annotation.NonNullByDefault(true)
public class HelloWorld {
public static final String RESULT = "C:\\Users\\administrator\\Pictures\\tuto";
@SuppressWarnings("resource")
public static void main(String[] args) throws DocumentException, IOException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(RESULT));
document.open();
document.add(new Paragraph("Hello World!"));
document.close();
}
}
Ce code me renvoie un message d'erreur, qui est comme suit.
Exception in thread "main" Java.io.FileNotFoundException: C:\Users\valentin.schaefer\Pictures\tuto (Access is denied)
at Java.io.FileOutputStream.open(Native Method)
at Java.io.FileOutputStream.<init>(Unknown Source)
at Java.io.FileOutputStream.<init>(Unknown Source)
at HelloWorld.main(HelloWorld.Java:25)
Pourtant, je suis l'administrateur de l'ordinateur et j'ai normalement tous les comptes d'autorisations. Je ne comprends pas pourquoi il m'a renvoyé Access is denied
.
Vous essayez d'accéder au répertoire. Le paramètre de FileOutputStream doit être un objet File
/Path
pointant vers un fichier:
FileOutputStream file = new FileOutputStream("path/file.txt");
File -------------------------------^
Pour plus de détails, consultez http://docs.Oracle.com/javase/7/docs/api/Java/io/FileOutputStream.html
Vous devez avoir la permission d'accéder à cet emplacement de fichier. Il y a deux solutions possibles.
1. use deferent file location to store your file (eg: D:\\somewhere)
2. make sure that you have permission to access current location by granting
read write permissions.
Je courais bien mon code sous Ubuntu.FileOutputStream = new FileOutputStream("test");
Après être allé à Windows, je commence à voir cette exception.
Cela m’a coûté un jour de constater que cette exception se produisait parce que j’avais un répertoire appeléTESTet que je tentais de créer un fichier appelé test
Je pense que Windows n'est pas sensible à la casse, donc c'était ambigu.
Bien que C:\directory\TEST
ne soit pas égal à C:\directory\test
sur Ubuntu.C:\directory\TEST
est égal à C:\directory\test
sous Windows.
J'ai eu un problème similaire dans lequel j'ai décompressé un fichier JAR qui a échoué en raison de ce message d'erreur. Ce pot était un pot avec des dépendances et j'avais récemment ajouté une nouvelle dépendance. Après avoir examiné le contenu du pot, il s’est avéré que j’avais un fichier LICENSE
et un dossier license
dans la même racine. Bien que cela soit complètement valide sous Linux, le système de fichiers Windows va commencer. Le travail dans mon cas était de piéger cette erreur dans un essai/attraper. Dans le crochet, vérifiez si vous êtes sur Windows, si c'est le cas, enregistrez un avertissement car il n'y a pas grand chose à faire, sinon jetez.
En fait, vous essayez d'accéder au répertoire à l'aide de FileOutputStream () Signifie que vous essayez d'accéder au répertoire "C:\Utilisateurs\administrateur\Images\tuto" En utilisant -
public static final String RESULT = "C:\\Users\\administrator\\Pictures\\tuto";
new FileOutputStream(RESULT);
Ce qui est faux car l’entrée valide pouvant être fournie à FileOutputstream () est soit le nom du fichier (comme "xyz.txt"), soit le chemin du fichier (comme "C:\sample\xyz.txt").
Utilisez le nom de fichier OR chemin du fichier avec FileOutputstream () et votre problème sera résolu.
Merci.