J'ai essayé de lire le fichier texte dans mes projets java, j'ai cherché la solution pendant toute la journée, j'ai essayé des tas de méthodes mais aucune n'a fonctionné. Certains d'entre eux: (De plus, je dois utiliser la classe File and Scanner)

String file = "fileTest.txt";
var path = Paths.get("test", file);
System.out.println(path);
System.out.println(Files.readString(path));

Exception dans le thread "main" java.nio.file.NoSuchFileException: test \ fileTest.txt

    URL url = ClassLoader.class.getResource("fileTest.txt");
    File file = null;
    file = new File(url.toURI());
    Scanner scanner = new Scanner(file);
    scanner.useDelimiter(" ");

    while(scanner.hasNext()) {
        System.out.println(scanner.toString());
    }

Exception dans le thread "main" java.lang.NullPointerException

    File file = new File("../test/fileTest.txt");
    Scanner scanner = new Scanner(file);
    scanner.useDelimiter(" ");

    while(scanner.hasNext()) {
        System.out.println(scanner.toString());
    }

    scanner.close();

Exception dans le thread "main" java.io.FileNotFoundException: .. \ test \ fileTest.txt (Le système ne trouve pas le chemin spécifié)

enter image description here

1
curiousStudents 19 mai 2020 à 16:53

4 réponses

Meilleure réponse

Remplacer

File file = new File("../test/fileTest.txt");
Scanner scanner = new Scanner(file);

Avec

File file = new File("test/fileTest.txt");
Scanner scanner = new Scanner(file);

Ensuite, si vous souhaitez le confirmer, procédez comme suit:

System.out.println(file.exists());

Remplacez également

while(scanner.hasNext()) {
    System.out.println(scanner.toString());
}

Avec

while(scanner.hasNext()) {
    System.out.println(scanner.next());
}
0
Arvind Kumar Avinash 19 mai 2020 à 14:03

Toutes les réponses qui parlent de chemins relatifs fonctionneront ou ne fonctionneront pas en fonction de votre répertoire de travail lorsque vous exécutez votre programme. Si vous voulez vraiment que votre fichier vive à l'intérieur du chemin de classe, ce que vous voulez faire est de l'utiliser comme ressource et de voir comment charger les ressources au moment de l'exécution. Si, par contre, vous voulez le traiter comme n'importe quel autre fichier, vous aurez besoin de savoir quel est le répertoire de travail au moment de l'exécution si vous vous attendez à ce qu'un chemin relatif fonctionne, ou que le chemin absolu soit spécifié à un endroit connu, comme un fichier de configuration.

3
Omaha 19 mai 2020 à 14:08

Lire un fichier avec BufferReader, en utilisant try-with-resource qui ferme automatiquement les ressources lorsque le traitement est terminé.

Voir les informations sur Java try-with-resource: https: // docs. oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

Modifier: assurez-vous d'avoir inclus le dossier en tant que ressource dans votre chemin de construction. Comment ajouter une ressource dossier vers mon projet Java dans Eclipse

String inputFile = "test/fileTest.txt";
List<String> lines = new ArrayList<>();

try(BufferedReader bufferedReader = new BufferedReader(new FileReader(inputFile))) {

    String line = bufferedReader.readLine();

    while(line != null){
        lines.add(line);
        line = bufferedReader.readLine();
    }

} catch (IOException e) {
    e.printStackTrace();
}
1
Bradley 19 mai 2020 à 14:10

Les problèmes ici sont la structure du projet et la façon dont vous essayez de localiser ce fichier. Par convention, vos fichiers de classe Java doivent exister dans le répertoire src/main/java et vos fichiers de ressources doivent exister dans src/main/resources. Si vous suivez cette convention, vous pouvez obtenir la ressource avec un ClassLoader.

        try (InputStream input = getClass().getClassLoader().getResourceAsStream("test.txt");
             Scanner scanner = new Scanner(Objects.requireNonNull(input)).useDelimiter(" ")) {
            while(scanner.hasNext()) {
                System.out.println(scanner.toString());
            }
        } catch (IOException ioe) {
            throw new RuntimeException("Something went wrong scanning file!", ioe);
        }
3
Jason 19 mai 2020 à 14:07