2011-02-18 9 views
1

J'essaie de lire à partir d'un fichier qui a des informations écrites au format: someName: aDoubleNumber et renvoie le nom et le double. J'ai écrit le scanner suivant, mais cela ne fonctionne pas, aucune idée pourquoi?Java Scanner ne lit pas

Scanner readFile = new Scanner("text.txt"); 
readFile.useDelimiter(":"); 
while (fileScanner.hasNext()) { 
String name = readFile.next(); 
} 
+2

Wh à veux-tu dire par "ça ne marche pas"? (Du point de vue de ce que vous n'essayez pas de lire dans les doubles.) – Jeremy

+0

Il dit qu'il ne peut pas trouver le paquet readFile. Et je ne sais pas comment l'obtenir pour lire les doubles. – James

+0

Avez-vous vu ça? http://download.oracle.com/javase/6/docs/api/java/util/Scanner.html – Jeremy

Répondre

7

Vous ne lisez pas à partir d'un fichier. Vous lisez la chaîne "text.txt". Vous avez besoin d'un fichier en premier.

Scanner readFile = new Scanner(new File("text.txt")); // don't forget to catch FileNotFoundException! 
    readFile.useDelimiter(":|\\n"); 
    while (fileScanner.hasNext()) { 
     String name = readFile.next(); 
     double value = readFile.nextDouble(); 
     System.out.println(name + " " + value); 
    } 

Je pris le code de votre commentaire et formaté, et je reçois ce

public class MyProject { 
    class FileInput { 
     Scanner readFile = new Scanner(new File("text.txt")); // don't forget to catch FileNotFoundException! 
     readFile.useDelimiter(":|\\n"); 
     while (fileScanner.hasNext()) { 
      String name = readFile.next(); 
      double value = readFile.nextDouble(); 
      System.out.println(name + " " + value); 
     } 
    } 
} 

Maintenant, vous semblez avoir un problème - peut-être que vous vouliez dire class FileInput être public void fileInput() throws Exception? Quand je fais cela, il compile. Maintenant, nous avons besoin d'une méthode main() pour l'exécuter! Donc, j'ajoute ceci:

public static void main(String[] args) throws Exception { 
    MyProject proj = new MyProject(); 
    proj.fileInput(); 
} 

Maintenant que je l'ai exécuté, j'ai eu une erreur. Cela signifie qu'il y avait effectivement un problème dans le code que je vous ai donné pour commencer. Bien sûr, ce code n'a jamais été conçu pour être copié-collé, mais plutôt pour donner une idée de la capacité. Quoi qu'il en soit, l'erreur est:

Exception in thread "main" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Scanner.java:840) 
    at java.util.Scanner.next(Scanner.java:1461) 
    at java.util.Scanner.nextDouble(Scanner.java:2387) 
    at MyProject.fileInput(MyProject.java:9) <--- Where it happened in our code 
    at MyProject.main(MyProject.java:16) 

La ligne où cela s'est passé était sur la parseDouble. Alors, essayons plutôt de le faire différemment. Nous pouvons obtenir la double comme un morceau brut de texte, puis l'analyser dans un deux réel comme celui-ci:

while (readFile.hasNext()) { 
     String name = readFile.next(); 
     String valueStr = readFile.next(); 
     double value = Double.parseDouble(valueStr); 
     System.out.println(name + " " + value); 
    } 

Ainsi, l'ensemble du programme complété est:

import java.util.*; 
import java.io.*; 
public class MyProject { 
    public void fileInput() throws Exception { 
     Scanner readFile = new Scanner(new File("text.txt")); // don't forget to catch FileNotFoundException! 
     readFile.useDelimiter(":|\\n"); 
     while (readFile.hasNext()) { 
      String name = readFile.next(); 
      String valueStr = readFile.next(); 
      double value = Double.parseDouble(valueStr); 
      System.out.println("Name: " + name); 
      System.out.println("Value: " + value); 
      System.out.println(""); // blank line 
     } 
    } 

    public static void main(String[] args) throws Exception { 
     MyProject proj = new MyProject(); 
     proj.fileInput(); 
    } 

Donc, pour le texte du fichier d'entrée étant:

this:1234.5 
that:321.0 
the other:0.122 

La sortie est

C:\Documents and Settings\glowcoder\My Documents>java MyProject 
Name: this 
Value: 1234.5 

Name: that 
Value: 321.0 

Name: the other 
Value: 0.122 


C:\Documents and Settings\glowcoder\My Documents>java MyProject 
} 
+0

En ce moment, mon code ressemble à: classe publique MyProject {classe FileInput {Scanner readFile = nouveau Scanner (new File ("text.txt")); // ne pas oublier d'attraper FileNotFoundException! readFile.useDelimiter (": | \\ n"); while (fileScanner.hasNext()) { String name = readFile.next(); double valeur = readFile.nextDouble(); System.out.println (nom + "" + valeur); } }} mais je reçois une exception. Désolé à ce sujet (j'apprends d'un livre) – James

+1

Mettez à jour votre question avec 1) Votre nouveau code et 2) l'avis d'exception copier/coller exact que vous obtenez. – corsiKa

+0

@James, j'ai mis à jour ma réponse par rapport à votre commentaire le plus récent ici. Faites-moi savoir si vous avez encore des questions à ce sujet. – corsiKa