2010-10-04 7 views
1

Vous cherchez de l'aide avec le code suivant:sortie d'un fichier dans printf

package pkgPeople; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.ObjectOutputStream; 
import java.io.PrintWriter; 
import java.util.ArrayList; 
import java.util.Scanner; 


public class RetrieveNonSerializedFile { 

    public static void main(String[] args) throws Exception{ 
    File inFile = new File("F:/CS9.27/friends2.dat"); 

     Scanner reader = new Scanner(inFile); 


     while (reader.hasNextLine()){ 
     String nm = reader.nextLine(); 
     int height = reader.nextInt(); 
     int weight = reader.nextInt(); 
     double balance = reader.nextDouble(); 
     long acctID = reader.nextInt(); 

     System.out.println(nm + ":" + height + " inches " + weight + " pounds" + acctID + " account ID" + balance + "dollars"); 
     /*writer.println(nm); 
     writer.println(height); 
     writer.println(weight); 
     writer.println(acctID); 
     writer.println(balance);*/ 
     } 

     reader.close(); 
     //writer.close(); 




    } 

} 

Lors de l'exécution du programme, l'exception

Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at pkgPeople.RetrieveNonSerializedFile.main(RetrieveNonSerializedFile.java:22) 

est jeté.

Le friends2.dat est un fichier de données qui a les suivantes .....

Jim is the name of the person. 
13 inches is the height of Jim. 
14 pounds is the weight of Jim 
1234.650000 dollars is the balance of Jim 
12345 is the ID of the bank account. 

Il est juste un fichier texte. Toute aide pour passer à travers le InputMismatch serait géniale. Merci.

+0

Est-ce que Jim est sur sa propre ligne? Pourriez-vous joindre un exemple de fichier avec 2-3 enregistrements? –

+0

oui c'est ligne par ligne. 5 lignes .. –

Répondre

1

Modifier: ce n'est pas grave. j'ai mal compris le modèle du fichier d'entrée :)

Le scanner lit sur l'appel String nm = reader.nextLine(); la ligne complète. Ensuite, vous appelez reader.nextInt(); mais la ligne suivante ne commence pas par un nombre entier. Par conséquent, il lance une exception.

Je pense que vous devriez essayer d'utiliser une expression régulière (http://download-llnw.oracle.com/javase/6/docs/api/java/util/Scanner.html#next%28java.util.regex .Pattern% 29) ou utilisez (http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#indexOf%28java.lang.String%29) pour trouver le bon les pièces.

BTW la balise devoirs doit être ajouté :)

+0

"Je pense que vous devriez essayer d'utiliser une expression régulière" - Alors vous aurez deux problèmes. –

+0

Pourquoi? Lisez le fichier texte et écrivez une regex qui consomme la première phrase et ainsi de suite. Je pensais que les phrases n'étaient pas divisées par i breakline. Cela rend reader.nextLine() erroné. – kasten

1

Vous n'avez pas consommé toute la ligne « 13 pouces est la hauteur de Jim. », Vous avez lu que la partie « 13 » de cette ligne avec votre int height = reader.nextInt(); Lorsque vous essayez ensuite de lire le poids (sur la ligne 22 en fonction de votre retraçage), vous essayez de lire à partir de "inches" sur la deuxième ligne du fichier d'entrée.