Java new File() dit que FileNotFoundException existe

j'ai un devoir pour ma classe de CS où il est dit de lire un dossier avec plusieurs résultats aux tests et me demande de les additionner et de les faire la moyenne. Bien que la sommation et la moyenne soit facile, j'ai des problèmes avec la lecture du fichier. L'instructeur a dit d'utiliser cette syntaxe

Scanner scores=new Scanner(new File("scores.dat"));

cependant, cela lance une exception FileNotFoundException, mais j'ai vérifié encore et encore pour voir si le fichier existe dans le dossier courant, et après cela, j'ai pensé qu'il devait faire quelque chose avec les permissions. Je changé les permissions pour lire et écrire pour tout le monde, mais il ne fonctionne toujours pas et il continue à jeter l'erreur. Quelqu'un a une idée de pourquoi cela pourrait se produire?

EDIT: il pointait en fait vers un répertoire, cependant, j'ai corrigé ce problème. fichier.exists() retourne true, cependant, quand j'essaie de le mettre dans le scanner, il lance le filenotfoundexception

Voici tout mon code

import java.util.Scanner;
import java.io.*;
public class readInt{
        public static void main(String args[]){
                File file=new File("lines.txt");
                System.out.println(file.exists());
                Scanner scan=new Scanner(file);
        }
}
25
demandé sur Terry Li 2013-10-11 02:58:25

6 réponses

il y a trois cas où un FileNotFoundException peut être levée.

  1. Le nom de fichier n'existe pas.
  2. le fichier nommé est en fait un répertoire.
  3. le fichier nommé ne peut pas être ouvert pour la lecture pour une raison quelconque.

les deux premiers cas sont peu probables selon votre description. Je testerais contre le troisième cas à l'aide de file.canRead().

Si le test ci-dessus renvoie vrai, je soupçonne le suivant:

vous pourriez ont oublié de lancer ou d'attraper explicitement l'exception potentielle (i.e.,FileNotFoundExcetion). Si vous travaillez dans un IDE, vous devriez avoir une plainte de la part du compilateur. Mais je soupçonne que vous n'avez pas utilisé votre code dans un tel IDE.

je viens d'exécuter votre code sans m'occuper de la plainte de Netbeans, seulement pour obtenir le message d'exception suivant:

Exception in thread "main" java.lang.RuntimeException: Uncompilable code source - exception non déclarée java.io.FileNotFoundException; must être pris ou déclarée à être jetés

Essayez le code suivant et de voir si l'exception serait parti:

public static void main(String[] args) throws FileNotFoundException {    
    File file=new File("scores.dat");
    System.out.println(file.exists());
    Scanner scan=new Scanner(file);
}
33
répondu Terry Li 2013-10-11 02:19:25

Le code fonctionne correctement. Le problème est que le chemin de travail du programme pointe vers un autre endroit que vous le pensez.

Utilisez cette ligne et voyez où le chemin est:

System.out.println(new File(".").getAbsoluteFile());
33
répondu libik 2013-10-10 23:03:04

évidemment il y a un certain nombre de causes possibles et les réponses précédentes les documentent bien, Mais voici comment j'ai résolu cela dans un cas particulier:

Un de mes étudiants a eu ce problème et j'ai presque déchiré mes cheveux à essayer de le comprendre. Il s'est avéré que le fichier n'existait pas, même s'il avait l'air d'exister. Le problème est que Windows 7 a été configuré pour "masquer les extensions de fichiers pour les types de fichiers connus."Cela signifie que si le fichier semble avoir le nom des données".txt" ses nom du fichier est " data.txt.txt".

J'espère que cela aidera les autres à se sauver quelques cheveux.

9
répondu petehern 2015-05-08 02:18:31

j'ai récemment trouvé un cas intéressant qui produit FileNotFoundExeption lorsque le fichier existe manifestement sur le disque. Dans mon programme, je lis le chemin de fichier d'un autre fichier texte et je crée l'objet de fichier:

//String path was read from file
System.out.println(path); //file with exactly same visible path exists on disk
File file = new File(path); 
System.out.println(file.exists());  //false
System.out.println(file.canRead());  //false
FileInputStream fis = new FileInputStream(file);  // FileNotFoundExeption 

la cause de l'histoire est que le chemin contient des symboles \r\n invisibles à la fin. Corrigé:

File file = new File(path.trim()); 
3
répondu yurin 2016-08-11 07:55:03

la lecture et l'écriture à partir d'un fichier et Vers un fichier peuvent être bloquées par votre système d'exploitation en fonction des attributs de permission du fichier.

si vous essayez de lire à partir du fichier, alors je vous recommande d'utiliser la méthode setReadable de File pour le définir à true, ou, ce code par exemple:

String arbitrary_path = "C:/Users/Username/Blah.txt";
byte[] data_of_file;
File f = new File(arbitrary_path);
f.setReadable(true);
data_of_file = Files.readAllBytes(f);
f.setReadable(false); // do this if you want to prevent un-knowledgeable 
                      //programmers from accessing your file.

si vous essayez d'écrire dans le fichier, alors je vous recommande D'utiliser la méthode setWritable de File pour le définir à true, ou, ce code par exemple:

String arbitrary_path = "C:/Users/Username/Blah.txt";
byte[] data_of_file = { (byte) 0x00, (byte) 0xFF, (byte) 0xEE };
File f = new File(arbitrary_path);
f.setWritable(true);
Files.write(f, byte_array);
f.setWritable(false); // do this if you want to prevent un-knowledgeable 
                      //programmers from changing your file (for security.)
2
répondu Solumyr 2017-07-07 13:03:24

Exception de toutes les autres réponses mentionnées ici, vous pouvez faire une chose qui a travaillé pour moi.

si vous lisez le chemin à travers le Scanner ou à travers la ligne de commande args, au lieu de copier le chemin directement à partir de Windows Explorer juste tapez manuellement le chemin d'accès.

Il a travaillé pour moi, j'espère que ça aide quelqu'un :)

1
répondu Alok 2017-05-27 13:59:09