Java NextBoolean() 从文本文件读取
Java NextBoolean() read from text file
大家好,我在尝试读取文本文件时遇到了这些错误:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at application.Test.main(Test.java:27)
通过尝试找出问题所在,我认为它是 nextBoolean()
,因为当我删除它时我没有收到任何错误。
这是我的代码:
package application;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
int age = 0;
String type = null, name = null, breed = null, desc = null;
boolean male = false;
File file = new File("animals.txt");
Scanner kb = new Scanner(file);
while (kb.hasNext()) {
age = kb.nextInt();
kb.nextLine();
type = kb.nextLine();
male = kb.nextBoolean();
name = kb.nextLine();
breed = kb.nextLine();
desc = kb.nextLine();
Animal animal = new Animal(age, type, male, name, breed, desc);
AnimalList.add(animal);
}
AnimalList.printAnimalList();
kb.close();
}
}
这是文本文件内容
6
Dog
false
Fred
Jack Rusell
dog is in poor condition
5
Cat
false
James
Russian blue
Good
9
Cat
true
Felix
Tabby
Cat in good condition
4
Bird
true
chirpy
Parrot
Parrot in good condition
如有任何帮助,我将不胜感激。过去几个小时我一直在谷歌搜索,但找不到任何解释。
您应该在 male = kb.nextBoolean();
之后添加行 kb.nextLine();
以强制 Scanner
转到下一行。
否则 name
在 相同的 行中的布尔值之后有一个值(它是空的)并且所有其他值都通过移位读取。
您在 nextBoolean
之后错过了对 nextLine
的呼叫。
nextBoolean
和 nextInt
方法不会读取您的行的换行,它会在读取 boolean
或 int
后立即停止。
您通过调用 nextLine
直接检索 name
并且您期望 "Fred" 但得到一个空字符串,因为您仍在同一行上。 "Fred" 实际上会分配给 breed
并且您的读数已损坏。
大家好,我在尝试读取文本文件时遇到了这些错误:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at application.Test.main(Test.java:27)
通过尝试找出问题所在,我认为它是 nextBoolean()
,因为当我删除它时我没有收到任何错误。
这是我的代码:
package application;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
int age = 0;
String type = null, name = null, breed = null, desc = null;
boolean male = false;
File file = new File("animals.txt");
Scanner kb = new Scanner(file);
while (kb.hasNext()) {
age = kb.nextInt();
kb.nextLine();
type = kb.nextLine();
male = kb.nextBoolean();
name = kb.nextLine();
breed = kb.nextLine();
desc = kb.nextLine();
Animal animal = new Animal(age, type, male, name, breed, desc);
AnimalList.add(animal);
}
AnimalList.printAnimalList();
kb.close();
}
}
这是文本文件内容
6
Dog
false
Fred
Jack Rusell
dog is in poor condition
5
Cat
false
James
Russian blue
Good
9
Cat
true
Felix
Tabby
Cat in good condition
4
Bird
true
chirpy
Parrot
Parrot in good condition
如有任何帮助,我将不胜感激。过去几个小时我一直在谷歌搜索,但找不到任何解释。
您应该在 male = kb.nextBoolean();
之后添加行 kb.nextLine();
以强制 Scanner
转到下一行。
否则 name
在 相同的 行中的布尔值之后有一个值(它是空的)并且所有其他值都通过移位读取。
您在 nextBoolean
之后错过了对 nextLine
的呼叫。
nextBoolean
和 nextInt
方法不会读取您的行的换行,它会在读取 boolean
或 int
后立即停止。
您通过调用 nextLine
直接检索 name
并且您期望 "Fred" 但得到一个空字符串,因为您仍在同一行上。 "Fred" 实际上会分配给 breed
并且您的读数已损坏。