使用Java中的Scanner从文件读取时的InputMismatchException

时间:2014-03-20 18:14:57

标签: java

我需要帮助这个学校的课程。我已经在几天内收到此错误,并且不知道问题出在哪里。我正在从文件中读取信息,出于某种原因,我收到以下错误:

好的,所以我的代码中一直出现以下错误:

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.nextInt(Scanner.java:2091)
    at java.util.Scanner.nextInt(Scanner.java:2050)
    at EmployeeWithFiles.readInputFile(EmployeeWithFiles.java:22)
    at CompanyWithFilesDemo.main(CompanyWithFilesDemo.java:28)

我知道错误在readInputFile中......这是我读取输入的方法:

public void readInputFile(Scanner inputStream)
{
        setFirstName(inputStream.nextLine());
        setLastName(inputStream.nextLine());
        setNumberOfDependents(inputStream.nextInt());
        setHourlyRate(inputStream.nextDouble());
        setHoursWorked(inputStream.nextDouble());
        setLocalTaxWithheldToDate(inputStream.nextDouble());
        setFederalTaxWithheldToDate(inputStream.nextDouble());
        setStateTaxWithheldToDate(inputStream.nextDouble());

}

这是我的输入文件:

jim
jackson
3
14.50
55.50
515.00
6010.00
2163.00
jim
jackson
3
14.50
55.50
515.00
6010.00
2163.00
jim
jackson
3
14.50
55.50
515.00
6010.00
2163.00

1 个答案:

答案 0 :(得分:1)

我几乎肯定问题是nextIntnextDouble中的一个没有进入下一行。所以在某些时候你可能会尝试读取一个双字符串,反之亦然。这就是InputMismatchException发生的地方。

您可以通过逐行阅读和必要时解析来避免此问题。让生活更轻松。

setNumberOfDependents(Integer.parseInt(inputStream.nextLine().trim()));
setHourlyRate(Double.parseDouble(inputStream.nextLine().trim()));
...