web-dev-qa-db-fra.com

Lecture d'un fichier .text à l'aide de la classe Scanner dans Java

Je travaille sur un programme Java qui lit un fichier texte ligne par ligne, chacun avec un numéro, prend chaque nombre dans un tableau, puis tente et utilise le tri par insertion pour trier le tableau. J'ai besoin d'aide pour que le programme lise le fichier texte.

Je reçois les messages d'erreur suivants:

Java.io.FileNotFoundException: 10_Random (The system cannot find the file specified)
at Java.io.FileInputStream.open(Native Method)
at Java.io.FileInputStream.<init>(Unknown Source)
at Java.util.Scanner.<init>(Unknown Source)
at insertionSort.main(insertionSort.Java:14)

J'ai une copie du fichier .txt dans mon dossier "src" "bin" et mon projet principal, mais le fichier ne peut toujours pas être trouvé. J'utilise Eclipse en passant.

import Java.io.File;
import Java.io.FileNotFoundException;
import Java.util.Scanner;

public class insertionSort {

public static void main(String[] args) {

    File file = new File("10_Random");

    try {

        Scanner sc = new Scanner(file);

        while (sc.hasNextLine()) {
            int i = sc.nextInt();
            System.out.println(i);
        }
        sc.close();
    } 
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }
 }
}
43
user12074577

Vous devez mettre l'extension de fichier ici

File file = new File("10_Random.txt");
54
Suranga

Utilisez les codes suivants pour lire le fichier

import Java.io.File;
import Java.util.Scanner;

public class ReadFile {

    public static void main(String[] args) {

        try {
            System.out.print("Enter the file name with extension : ");

            Scanner input = new Scanner(System.in);

            File file = new File(input.nextLine());

            input = new Scanner(file);


            while (input.hasNextLine()) {
                String line = input.nextLine();
                System.out.println(line);
            }
            input.close();

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}

-> Cette application imprime le contenu du fichier ligne par ligne

22
Dhanushka Gayashan

voici quelques méthodes de travail et testées;

using Scanner

package io;

import Java.io.File;
import Java.util.Scanner;

public class ReadFromFileUsingScanner {
    public static void main(String[] args) throws Exception {
        File file=new File("C:\\Users\\pankaj\\Desktop\\test.Java");
        Scanner sc=new Scanner(file);
        while(sc.hasNextLine()){
            System.out.println(sc.nextLine());
        }
    }
}


Voici un autre moyen de lire le fichier entier (sans boucle) en utilisant Scanner class

package io;

import Java.io.File;
import Java.io.FileNotFoundException;
import Java.util.Scanner;

public class ReadingEntireFileWithoutLoop {
    public static void main(String[] args) throws FileNotFoundException {
        File file=new File("C:\\Users\\pankaj\\Desktop\\test.Java");
        Scanner sc=new Scanner(file);
        sc.useDelimiter("\\Z");
        System.out.println(sc.next());
    }
}

en utilisant BufferedReader

 package io;
import Java.io.*;
public class ReadFromFile2 {
    public static void main(String[] args)throws Exception {
        File file=new File("C:\\Users\\pankaj\\Desktop\\test.Java");
        BufferedReader br=new BufferedReader(new FileReader(file));
        String st;
        while((st=br.readLine())!=null){
            System.out.println(st);
        }
    }
}

using FileReader

package io;
import Java.io.*;
public class ReadingFromFile {
    public static void main(String[] args) throws Exception {
        FileReader fr=new FileReader("C:\\Users\\pankaj\\Desktop\\test.Java");
        int i;
        while((i=fr.read())!=-1){
            System.out.print((char) i);
        }
    }
}
7
pankaj
  1. Assurez-vous que le nom de fichier est correct (capitalisation correcte, extension correspondante, etc. - comme déjà suggéré).

  2. Utilisez la méthode Class.getResource pour localiser votre fichier dans le chemin de classe - ne vous fiez pas au répertoire actuel:

    _URL url = insertionSort.class.getResource("10_Random");
    
    File file = new File(url.toURI());
    _
  3. Spécifiez le chemin de fichier absolu via des arguments de ligne de commande:

    _File file = new File(args[0]);
    _

Dans Eclipse:

  1. Choisissez "Exécuter les configurations"
  2. Allez dans l'onglet "Arguments"
  3. Placez votre "c: /my/file/is/here/10_Random.txt.or.wwhat" dans la section "Arguments du programme".
6
mvmn

Personne ne semble avoir abordé le fait que vous n'entrez rien du tout dans un tableau. Vous définissez chaque int qui est lu sur "i" puis vous le sortez.

for (int i =0 ; sc.HasNextLine();i++)
{
    array[i] = sc.NextInt();
}

Quelque chose dans cet effet gardera les valeurs de réglage du tableau pour le prochain entier lu.

Une autre boucle for peut afficher les nombres du tableau.

for (int x=0;x< array.length ; x++)
{
    System.out.println("array[x]");
}
2
Vrezh Gulyan
  1. Vous devez spécifier le nom de fichier exact, y compris l’extension, par exemple. 10_Random.txt.
  2. Le fichier doit se trouver dans le même répertoire que l'exécutable si vous souhaitez y faire référence sans chemin explicite.
  3. Pendant que nous y sommes, vous devez rechercher un int avant de lire un int. Il n’est pas prudent de vérifier avec hasNextLine() et d’attendre ensuite un int avec nextInt(). Vous devez utiliser hasNextInt() pour vérifier qu'il y a bien un int à saisir. Vous décidez bien entendu de la stricte application de la règle du nombre entier par ligne.
1
Iskar Jarak

Vous devriez utiliser soit

File file = new File("bin/10_Random.txt");

Ou

File file = new File("src/10_Random.txt");

Relatif au dossier de projet dans Eclipse.

1
Rajesh Guptan

void privé loadData () {

    Scanner scanner = null;
    try {
        scanner = new Scanner(new File(getFileName()));
        while (scanner.hasNextLine()) {
            Scanner lijnScanner = new Scanner(scanner.nextLine());

            lijnScanner.useDelimiter(";");
            String stadVan = lijnScanner.next();
            String stadNaar = lijnScanner.next();
            double km = Double.parseDouble(lijnScanner.next());

            this.voegToe(new TweeSteden(stadVan, stadNaar), km);

        }
    } catch (FileNotFoundException e) {
        throw new DbException(e.getMessage(), e);
    } finally {
        if(scanner != null){
            scanner.close();
        }
    }
}
1
Thomas Wouters

Chemin du fichier Cela semble être un problème ici. Veuillez vous assurer que le fichier existe dans le bon répertoire ou indiquez le chemin absolu pour vous assurer que vous pointez sur le bon fichier. Enregistrez le fichier file.getAbsolutePath () pour vérifier que le fichier est correct.

1
Avijit

Le fichier que vous avez lu doit avoir exactement le nom de fichier que vous spécifiez: "10_random" et non pas "10_random.txt" ni "10_random.blah", il doit correspondre exactement à ce que vous demandez. Vous pouvez modifier l'un ou l'autre pour qu'il corresponde, mais assurez-vous simplement qu'il le soit. Il peut être utile d’afficher les extensions de fichier dans le système d’exploitation utilisé.

En outre, pour l'emplacement du fichier, il doit être situé dans le répertoire de travail (même niveau) que l'exécutable final (le fichier .class) résultant de la compilation.

0
Kyle Falconer

Tout d’abord, vérifiez l’adresse du fichier. Elle doit figurer à côté de votre fichier .Java ou de toute adresse que vous définissez dans la variable d’environnement classpath. Lorsque vous cochez cette case, essayez ci-dessous.

  1. vous devez utiliser un nom de fichier par son extension dans le constructeur d'objet File, à titre d'exemple:

    File myFile = new File("test.txt");

  2. mais il existe un meilleur moyen de l'utiliser à l'intérieur de l'objet Scanner en transmettant l'adresse absolue du nom de fichier, à titre d'exemple:

    Scanner sc = new Scanner(Paths.get("test.txt"));

de cette façon, vous devez également importer Java.nio.file.Paths.

0
Amir Maleki