2011-10-18 3 views
0

Très bien, j'écris donc une application Java pour importer un fichier csv, puis parcourir les résultats et les charger dans un tableau. J'importe le fichier correctement car il ne le fait pas à travers une exception. Mes problèmes sont que lorsque j'essaie de compter le nombre d'enregistrements dans le FileInputStream je suis coincé dans une boucle infinie. Quel pourrait être le problème ici. Heres le code:Boucle infinie lors de la lecture en boucle de FileInputStream

Ceci est ma classe avec une méthode principale qui appelle aller():

public void go() { 
    pop = new PopularNames(); 
    popGui = new PopularNamesGui(); 
    String file = popGui.userInput("Enter the correct name of a file:"); 
    pop.setInputStream(file); 
    pop.getNumberOfNames(); 
} 

Ce sont les PopularNames de classe (pop), et dans la méthode ci-dessous, je suis en train de le fluxEntrée var un nouveau FileINputStream. Le nom du fichier est fourni par l'utilisateur.

public void setInputStream(String aInputStream) { 
    try { 
     inputStream = new Scanner(new FileInputStream(aInputStream)); 
    } catch (FileNotFoundException e) { 
     System.out.println("The file was not found."); 
     System.exit(0); 
    } 
} 

Ceci est la méthode de dépannage. Là où je suis simplement Boucler dans FileInputStream et en comptant le nombre d'enregistrements:

public void getNumberOfNames() { 
    while (this.inputStream.hasNext()) { 
     fileDataRows++; 
    } 
} 
+2

C'est une mauvaise idée d'utiliser le nom 'inputStream' pour quelque chose qui est en fait un' Scanner'. Cela rend très confus quand vous ne voyez pas la déclaration pendant un moment, et voyez juste les appels de méthodes qui ne sont pas valides sur un 'InputStream 'réel. De même, 'aInputStream' semble être en fait' filename 'ou quelque chose de similaire. –

+0

Ce que Jon a dit (+1), mais je le reformulerais comme "c'est vraiment ** une mauvaise idée" de ne pas suivre les normes de nommage sensées – Bohemian

Répondre

6
public void getNumberOfNames() { 
    while (this.inputStream.hasNext()) { 
    inputStream.nextLine(); // Need to read it so that we can go to next line if any 
    fileDataRows++;  
    } 
} 
+0

D'accord. Voir aussi http://download.oracle.com/javase/1,5,0/docs/api/java/util/Iterator.html#next() en ce qui concerne next() et hasNext() – rit

+0

@Walter: yes.you J'ai déjà lu tout le fichier. –

+0

Cela a fonctionné ... cependant quand je suis allé lire le fichier dans un tableau, (dans une autre méthode), j'ai eu une erreur qui disait: Aucune ligne trouvée ... pourquoi? –