Java NextBoolean()从文本文件中读取

时间:2016-02-28 20:28:03

标签: java mismatch

嘿伙计们在尝试从文本文件中读取时遇到这些错误:

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

如果有任何帮助,我将不胜感激。我在过去的几个小时里一直在谷歌搜索,我找不到任何解释。

2 个答案:

答案 0 :(得分:1)

您应该在kb.nextLine();之后添加行male = kb.nextBoolean();以强制Scanner转到下一行。

否则name相同行中的布尔值之后有一个值(它为空),并且所有其他值都以移位读取。

答案 1 :(得分:1)

nextLine后,您错过了对nextBoolean的来电。

nextBooleannextInt方法不会读取您的一行的lineFeed,它会在阅读booleanint后立即停止。

您可以通过调用name直接检索nextLine,并且您希望“Fred”,而是获得一个空字符串,因为您仍在同一行。 breed并且您的阅读已损坏。