Ligne de lecture avec scanner

EDIT pour d’autres lecteurs: le problème était que mon fichier d’entrée était corrompu.

Je ne comprends pas ce que je fais mal:

J’utilisais ce code:

File f = new File("C:\\Temp\\dico.txt"); BufferedReader r = null; try { r = new BufferedReader(new FileReader(f)); Ssortingng scan; while((scan=r.readLine())!=null) { if(scan.length()==0) {continue;} //treatment } } catch (FileNotFoundException ex) { Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex); } finally { if(r!=null) try { r.close(); } catch (IOException ex) { Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex); } } 

Ce qui fonctionne bien. Maintenant, pour une raison quelconque, je voulais changer pour un scanner. Mon code est devenu:

  File f = new File("C:\\Temp\\dico.txt"); Scanner r = null; try { r = new Scanner(f); Ssortingng scan; while(r.hasNextLine()) { scan = r.nextLine(); if(scan.length()==0) {continue;} //treatment } } catch (FileNotFoundException ex) { Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex); } finally { if(r!=null) r.close(); } 

Cette fois, nous n’entrons jamais dans le temps, car r.hasNextLine () renvoie toujours “false”. Une idée de ce que je fais mal?

Je précise que rien d’autre n’a changé, le fichier est toujours le même.

EDIT : Je précise également que j’ai essayé avec un autre fichier et obtenu le même résultat, ce qui signifie que cela ne provient apparemment pas du fichier.

Le fichier ressemble à ceci:

 a à abaissa abaissable abaissables abaissai abaissaient abaissais abaissait ... 

Edit 2: Le contenu du fichier semble poser problème car le problème ne persiste que si je copie / colle le contenu de mon fichier dans un autre. En clair, si j’écris moi-même le contenu, cela fonctionne, si j’utilise une partie du contenu de mon fichier dico.txt, cela ne fonctionne pas. Une explication?

Edit 3: Ce sont les liens vers mes fichiers. Je vous conseille d’éviter le dico.txt qui est très énorme.

dico.txt: https://drive.google.com/file/d/0B0sroFy9HZlBNDl3MUwzVnh6VU0/edit?usp=sharing

test.txt: https://drive.google.com/file/d/0B0sroFy9HZlBemZjbXU1RmlmdjQ/edit?usp=sharing

Ce code lit le fichier ligne par ligne.

 public static void readFileByLine(Ssortingng fileName) { try { File file = new File(fileName); Scanner scanner = new Scanner(file); while (scanner.hasNext()) { System.out.println(scanner.next()); } scanner.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } 

Vous pouvez également définir un séparateur comme séparateur de ligne, puis effectuer la même opération.

  scanner.useDelimiter(System.getProperty("line.separator")); 

Vous devez vérifier si un jeton suivant est disponible, puis lire le jeton suivant. Vous devrez également vérifier les données transmises au scanner. c’est-à-dire dico.txt. Par défaut, Scanner interrompt sa saisie en fonction des espaces. Veuillez vous assurer que l’entrée a les délimiteurs au bon endroit

RÉPONSE MISE À JOUR pour votre commentaire:

Je viens d’essayer de créer un fichier d’entrée avec le contenu ci-dessous

 a à abaissa abaissable abaissables abaissai abaissaient abaissais abaissait 

essayé de le lire avec le code ci-dessous.Il a juste fonctionné bien.

  File file = new File("/home/keerthivasan/Desktop/input.txt"); Scanner scr = null; try { scr = new Scanner(file); while(scr.hasNext()){ System.out.println("line : "+scr.next()); } } catch (FileNotFoundException ex) { Logger.getLogger(ScannerTest.class.getName()).log(Level.SEVERE, null, ex); } 

Sortie:

 line : a line : à line : abaissa line : abaissable line : abaissables line : abaissai line : abaissaient line : abaissais line : abaissait 

alors, je suis sûr que cela devrait fonctionner. Puisque vous travaillez sous Windows, la séquence de fin de ligne (0x0D 0x0A, \ r \ n) est en réalité composée de deux caractères ASCII, une combinaison des caractères CR et LF. si vous configurez votre instance Scanner pour utiliser le délimiteur comme suit, elle détectera probablement

  scr = new Scanner(file); scr.useDelimiter("\r\n"); 

et ensuite faites votre boucle pour lire les lignes. J’espère que cela t’aides!

Les méthodes next () et nextLine () sont associées à Scanner et sont utilisées pour obtenir des entrées Ssortingng. Leurs différences sont …

next () ne peut lire l’entrée que jusqu’à l’espace. Il ne peut pas lire deux mots séparés par un espace. En outre, next () place le curseur sur la même ligne après avoir lu l’entrée.

nextLine () lit les entrées, y compris les espaces entre les mots (c’est-à-dire jusqu’à la fin de la ligne \ n). Une fois l’entrée lue, nextLine () positionne le curseur sur la ligne suivante.

Lire l’article: Différence entre next () et nextLine ()

Remplacez votre boucle while par:

 while(r.hasNext()) { scan = r.next(); System.out.println(scan); if(scan.length()==0) {continue;} //treatment } 

L’utilisation des hasNext() et next() permettra de résoudre le problème.

 /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaapplication1; import java.io.File; import java.util.Scanner; /** * * @author zsagga */ class openFile { private Scanner x ; int count = 0 ; Ssortingng path = "C:\\Users\\zsagga\\Documents\\NetBeansProjects\\JavaApplication1\\src\\javaapplication1\\Readthis.txt"; public void openFile() { // System.out.println("I'm Here"); try { x = new Scanner(new File(path)); } catch (Exception e) { System.out.println("Could not find a file"); } } public void readFile() { while (x.hasNextLine()){ count ++ ; x.nextLine(); } System.out.println(count); } public void closeFile() { x.close(); } } /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaapplication1; /** * * @author zsagga */ public class JavaApplication1 { public static void main(Ssortingng[] args) { // TODO code application logic here openFile r = new openFile(); r.openFile(); r.readFile(); r.closeFile(); } } 

Essayez d’utiliser r.hasNext () au lieu de r.hasNextLine () :

 while(r.hasNext()) { scan = r.next(); 

Pour tous ceux qui ne peuvent toujours pas lire un simple fichier .txt avec le scanner Java.


J’ai eu le problème que le scanner ne pouvait pas lire à la ligne suivante, lorsque je copiais et collais les informations ou qu’il y avait trop de texte dans mon fichier.

La solution est la suivante: Codez votre fichier .txt en UTF-8.
Cela peut être fait assez simplement en enregistrant à nouveau l’ouverture du fichier et en modifiant le codage en UTF-8. (Sous Win7 près du coin inférieur droit)

Le scanner ne devrait pas avoir de problème après cela.