Obtenir FileNotFoundException même si fichier existe et est correctement orthographié
Je crée un petit programme qui lit un fichier texte, qui contient beaucoup de chiffres générés de manière aléatoire, et de produire des statistiques telles que la moyenne, la médiane et le mode. J'ai créé le fichier texte et fait en sorte que le nom est exactement le même lorsqu'ils sont déclarés en tant que nouveau fichier.
Oui, le fichier est dans le même dossier que les fichiers de classe.
public class GradeStats {
public static void main(String[] args){
ListCreator lc = new ListCreator(); //create ListCreator object
lc.getGrades(); //start the grade listing process
try{
File gradeList = new File("C:/Users/Casi/IdeaProjects/GradeStats/GradeList");
FileReader fr = new FileReader(gradeList);
BufferedReader bf = new BufferedReader(fr);
String line;
while ((line = bf.readLine()) != null){
System.out.println(line);
}
bf.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
Ligne d'erreur se lit comme suit:
java.io.FileNotFoundException: GradeList.txt (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileReader.<init>(FileReader.java:72)
at ListCreator.getGrades(ListCreator.java:17)
at GradeStats.main(GradeStats.java:11)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Veuillez s'il vous plaît inclure les informations sur les IDE, et la structure de répertoire?
Le fichier peut être dans le même répertoire que les fichiers de classe, mais qui n'est normalement pas le répertoire courant. Essayer de faire un système..println(GradeList.getAbsolutePath())
Ensuite, utilisez le chemin d'accès complet vers le fichier. Il devrait être évident que vous êtes à la recherche dans le mauvais endroit pour le fichier.
Ce qui est arrivé à votre fichier ".txt" extension? Double vérification, contrôle triple, quadruple vérifier que tout est écrit ET capitalisés exactement comme il est sur le disque.
Votre code dit "GradeList" et votre message d'exception dit "GradeList.txt". Ergo vous n'êtes pas à l'exécution de ce code.
Le fichier peut être dans le même répertoire que les fichiers de classe, mais qui n'est normalement pas le répertoire courant. Essayer de faire un système..println(GradeList.getAbsolutePath())
Ensuite, utilisez le chemin d'accès complet vers le fichier. Il devrait être évident que vous êtes à la recherche dans le mauvais endroit pour le fichier.
Ce qui est arrivé à votre fichier ".txt" extension? Double vérification, contrôle triple, quadruple vérifier que tout est écrit ET capitalisés exactement comme il est sur le disque.
Votre code dit "GradeList" et votre message d'exception dit "GradeList.txt". Ergo vous n'êtes pas à l'exécution de ce code.
OriginalL'auteur cmcdaniels | 2012-05-29
Vous devez vous connecter pour publier un commentaire.
Que diriez-vous d':
Imprimer ce. Il vous dira ce que le répertoire de travail courant. Ensuite, vous devriez être en mesure de voir pourquoi il n'est pas de trouver le fichier.
Plutôt que de permettre à votre code à jeter, vous pouvez cocher la case pour vous permettre de faire quelque chose si le fichier n'est pas trouvé:
S'il vous plaît exécuter les ci-dessous et collez le sortie:
Avez-vous imprimer curDir? Que voulait-il dire? Où est GradeList situé?
J'ai ajouté quatre lignes de code en bas de ma réponse. S'il vous plaît exécuter et de le coller ici la sortie
l'impression curDir entraîné dans C:\Users\Casi\IdeaProjects\GradeStats. Le GradeList dossier \GradeStats\src, mais lors de l'utilisation du système..println(GradeList.getAbsolutePath ()), il imprime le même chemin que la curDir.
Droit donc, si vous mettez: Fichier GradeList = new File("C:\Users\Casi\IdeaProjects\GradeStats\GradeList.txt"); Il devrait le trouver. C'est que là où l'explorateur windows affiche comme étant?
OriginalL'auteur nuzz
Le problème est que vous avez spécifié seulement un relative chemin d'accès au fichier et ne sais pas ce que le "répertoire courant" de votre application java est.
Ajouter ce code, et tout sera clair:
En examinant le chemin d'accès absolu, vous trouverez que le fichier est pas est le répertoire courant.
L'autre approche consiste à spécifier le chemin absolu du fichier lors de la création du Fichier de l'objet:
btw, essayer de coller à des conventions de nommage: le nom de vos variables avec un leader de la lettre en minuscule, c'est à dire
gradeList
pasGradeList
OriginalL'auteur Bohemian