java.io.FileNotFoundException lors de l'ouverture du fichier avec filewriter en Java
Je suis en train d'écrire quelque chose dans un fichier, comme ceci:
FileWriter fw = new FileWriter("somefile.txt", true);
Il fonctionne correctement lorsqu'il est lancé par un seul processus. Comme ceci:
java -jar XXXXXXX.jar
Mais lorsque l'appeler par un autre processus, une IOException sera levée. Exemple:
java.io.FileNotFoundException: 'somefile.txt' (No such file or directory)
at java.io.FileOutputStream.openAppend(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:192)
at java.io.FileOutputStream.<init>(FileOutputStream.java:116)
at java.io.FileWriter.<init>(FileWriter.java:61)
- Définir le "autre procédé". Comment voulez-vous commencer votre programme?
- Peut-être parce que le fichier n'existe pas dans le dossier où vos autres processus?
- Très probablement, votre premier processus a commencé à utiliser le fichier et n'a pas fermé la référence à elle. Ainsi, lors de votre deuxième processus tente d'y accéder(en mode ajout), il est en train de jeter le
FNFE
.
Vous devez vous connecter pour publier un commentaire.
Un certain nombre de réponses ont mal suggéré que l'exception se produit car le fichier n'existe pas. Ce n'est pas la raison; la documentation du constructeur stipule clairement:
Si vous êtes de passage à un parent de nom de fichier (une chaîne de caractères sans '/' ou '\' en elle), il fait référence à un fichier dans le répertoire courant. Je suppose que lorsque vous l'exécutez en utilisant
java -jar
, le répertoire courant est le répertoire pour lequel vous avez l'autorisation d'écriture, mais lorsque que les autres processus s'exécute, le répertoire courant n'est pas accessible en écriture.Dans le passé, les anciennes versions de Java avait l'habitude de lancer des FileNotFoundException lorsqu'il essaie d'écrire dans un unwritable répertoire. La dernière version de Java ne semble pas le faire, si, si je ne suis pas certain si c'est ça le problème. Vous pouvez obtenir une meilleure exception en utilisant le java.nio.fichier package:
Comme l'Exception des états, le fichier
somefile.txt
n'existe pas. Ce serait bien, sauf que le deuxième argument de laFileWriter
constructeur indique que vous souhaitez ajouter à un fichier existant, ce qui signifie que le fichier doit exister. Je vous suggère de vérifier l'existence du fichier à l'aideFichier.exists()
, et si il existe utilisationnew FileWriter("somefile.txt", true);
, sinon utiliseznew FileWriter("somefile.txt", false);
pour créer le fichier pour la première fois.Il y a plusieurs explications possibles:
somefile.txt
dans le répertoire courant.Dès le début de la process2:
Il va essayer de trouver le somefile.txt dans votre répertoire courant.
Si le fichier n'est pas trouvé avec le nom donné dans le répertoire courant puis,Il va essayer d'en créer une nouvelle,mais à cause des droits de l'utilisateur ne parvient pas à créer un nouveau fichier avec le nom donné.
Vérifier manuellement, fichier existe ou pas dans votre répertoire courant.
Compte tenu de la FileNotFoundException il indique assez clairement que le fichier est tout simplement pas là.
Je suppose que votre deuxième processus démarre à certains racine du dossier où le fichier est tout simplement pas là, utilisez le chemin d'accès absolu du fichier de sorte que ce est la question. Ou tout simplement utiliser un simple case à
avant d'y accéder, et si ce n'est montrer le chemin étant utilisé par le programme.
JavaDoc
http://docs.oracle.com/javase/1.5.0/docs/api/java/io/FileNotFoundException.html
peut-être que vous avez ouvert le fichier avec un processus et non pas fermé le fichier, donc si vous essayez d'ouvrir le fichier de nouveau, dans ces une exception sera levée, car le fichier ne peut pas ouverte deux fois