2013-02-08 2 views
0

Des questions similaires concernent les fichiers du lecteur C:, où le codage en dur du chemin de fichier est une réponse acceptable. Cette application est mobile, et coder en dur le chemin du fichier n'est pas pratique.FileNotFoundException lorsque le fichier existe dans le même dossier que le programme

J'essaye d'importer un fichier texte par scanner, qui contient une liste de chaînes de caractères, 15 caractères chacune, 1 par ligne. BEAUCOUP de lignes Le nom de fichier est a.txt.

Je l'appelle à l'aide

File data = new File("a.txt"); 
Scanner in = new Scanner(data); 

répété les lignes ci-dessous avec "b.txt", en utilisant différents noms d'objets.

Cependant, quand je construis le programme, je reçois ce journal d'erreur (en utilisant Jcreator IDE):

--------------------Configuration: <Default>-------------------- 
E:\Simple Encryption\Simple_Encryption.java:17: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown 
    Scanner in = new Scanner(data); 
       ^
E:\Simple Encryption\Simple_Encryption.java:18: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown 
    Scanner numsIn = new Scanner(nums); 
        ^
2 errors 

Process completed. 

Le programme est dans le dossier E:/Simple Encryption/, qui contient les fichiers et les dossiers suivants:

  • Simple_Encryption.java
  • Simple_Encryption.class
  • lock.png (inutilisé)
  • a.txt
  • b.txt (même erreur que a.txt importation, une seule ligne ci-dessous)
  • /images (dossier, contient icon.png)

Il n'y a rien d'autre dans le dossier . Je ne peux pas coder en dur le chemin d'accès au fichier car sur des ordinateurs différents, il a des noms de lecteurs différents et sera distribué sous différents dossiers plus tard. (Ici (école), il est sur le E: disque, à la maison, il est le J: lecteur et au travail, il est sur le lecteur G:.)

Bien que j'ai obtenu l'aide d'erreurs existantes, je dois importer cela sur le programme démarrage, et pas seulement l'ignorer. Le fichier existe sous sa forme actuelle et le programme ne peut pas fonctionner sans elle.

Quelle est l'origine de cette erreur? Et que puis-je faire pour éviter cela?

Répondre

1
E:\Simple Encryption\Simple_Encryption.java:17: unreported exception 
java.io.FileNotFoundException; must be caught or declared to be thrown 

En tant que votre exception en disant que vous devez utiliser répar- bloc catch

try { 
    Scanner numsIn = new Scanner(nums); 
catch (FileNotFoundException e) { 
    // do something 
} finally { 
    if (numsIn != null) numsIn .close(); 
} 

OU

vous devez jeter cette exception si la méthode appelant

public static void xxxx() throws FileNotFoundException { 
    // do something 
} 
1

Le problème n'est pas l'exception qui est levée, mais le fait que le con stuctor est déclaré comme lançant l'exception FileNotFoundException vérifiée. Comme il s'agit d'une exception vérifiée, elle doit être gérée par le programmeur, car elle sert à signaler quelque chose qui peut arriver.

Vous devez donc les enfermer dans une déclaration try/catch:

Scanner in = null; 
try { 
    in = new Scanner(file); 
} 
catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} 
0

Comme vous le dites le fichier existe, mais il déclare qu'il ne peut pas trouver le fichier. Essayez ceci:

System.out.println(data.getAbsolutePath()); 

Cela devrait vous permettre de savoir exactement où il est à la recherche du fichier, et vous pouvez ensuite modifier l'application sans utiliser les chemins complets

Questions connexes