web-dev-qa-db-fra.com

L'accès FileOutputStream est refusé: JAVA

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.

8
mortiped

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

11
Kick

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. 
1

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. 

0
thiagola92

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.

0
spy

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.

0
LearnAndHelp