2011-02-18 63 views
1

我試圖從具有以下格式寫入的信息的文件中讀取: someName:aDoubleNumber 並返回名稱和雙精度值。 我已經寫了下面的掃描儀,但它不起作用,爲什麼?Java掃描程序不會讀取

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

瓦時你的意思是「它不工作」? (從它的外觀來看,你並不想在任何雙打中讀取它。) – Jeremy

+0

它說它無法找到readFile軟件包。而且我不知道如何讓它讀取雙打。 – James

+0

你見過這個嗎? http://download.oracle.com/javase/6/docs/api/java/util/Scanner.html – Jeremy

回答

7

您不是從文件中讀取數據。您正在閱讀字符串「text.txt」。你首先需要一個文件。

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); 
    } 

我把代碼從您的評論和格式化,我得到這個

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); 
     } 
    } 
} 

現在你似乎有一個問題 - 也許你的意思class FileInputpublic void fileInput() throws Exception?當我這樣做時,它會編譯。現在我們需要一個main()方法來運行它!所以我補充說:

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

現在,當我跑它時,我實際上有一個錯誤。這意味着在我開始的代碼中實際存在一個問題。當然,該代碼從來沒有打算複製/粘貼,但更多的是給出能力的想法。無論如何,錯誤是:

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) 

它發生的行在parseDouble上。所以,讓我們嘗試一種不同的方式。我們可以得到雙重作爲原料一段文字,然後將其解析爲一個實際的雙這樣的:

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

所以整個完成的程序是:

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(); 
    } 

所以輸入文件的文本是:

this:1234.5 
that:321.0 
the other:0.122 

輸出是

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

現在,我的代碼如下所示:public class MyProject {class FileInput {Scanner readFile = new Scanner(new File(「text.txt」)); //不要忘記捕捉FileNotFoundException! readFile.useDelimiter(「:| \\ n」); (fileScanner.hasNext()){ String name = readFile.next(); double value = readFile.nextDouble(); System.out.println(name +「」+ value); } }}但我得到一個異常。對此抱歉(我正在從書中學習) – James

+1

用1)您的新代碼和2)您得到的確切複製/粘貼異常通知更新您的問題。 – corsiKa

+0

@詹姆斯,我在這裏更新了我對你最近評論的回答。如果您對此有任何疑問,請告知我。 – corsiKa