我試圖從具有以下格式寫入的信息的文件中讀取: someName:aDoubleNumber 並返回名稱和雙精度值。 我已經寫了下面的掃描儀,但它不起作用,爲什麼?Java掃描程序不會讀取
Scanner readFile = new Scanner("text.txt");
readFile.useDelimiter(":");
while (fileScanner.hasNext()) {
String name = readFile.next();
}
我試圖從具有以下格式寫入的信息的文件中讀取: someName:aDoubleNumber 並返回名稱和雙精度值。 我已經寫了下面的掃描儀,但它不起作用,爲什麼?Java掃描程序不會讀取
Scanner readFile = new Scanner("text.txt");
readFile.useDelimiter(":");
while (fileScanner.hasNext()) {
String name = readFile.next();
}
您不是從文件中讀取數據。您正在閱讀字符串「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 FileInput
是public 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
}
現在,我的代碼如下所示: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)您的新代碼和2)您得到的確切複製/粘貼異常通知更新您的問題。 – corsiKa
@詹姆斯,我在這裏更新了我對你最近評論的回答。如果您對此有任何疑問,請告知我。 – corsiKa
瓦時你的意思是「它不工作」? (從它的外觀來看,你並不想在任何雙打中讀取它。) – Jeremy
它說它無法找到readFile軟件包。而且我不知道如何讓它讀取雙打。 – James
你見過這個嗎? http://download.oracle.com/javase/6/docs/api/java/util/Scanner.html – Jeremy