来自文件的扫描仪InputMismatchException

时间:2016-11-10 07:39:25

标签: java file

使用Java完成我的第一步,这是我的问题:

1。)rawData.txt可以读取:

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import static java.lang.System.out;

class ReadAndWrite {

    public static void main(String args[]) 
                         throws FileNotFoundException {

        Scanner diskScanner = new Scanner(new File("rawData.txt")); 
        String diskString;
        diskString = diskScanner.nextLine();
        out.println(diskString);
        diskScanner.close();
    }
}

eclipse控制台的结果是:

>19.5 5 

所以我想可以阅读内容。

但是:nextDouble()nextInt()无效:

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;

class ReadAndWrite {

    public static void main(String args[]) 
                         throws FileNotFoundException {

        Scanner diskScanner = new Scanner(new File("rawData.txt"));
        double unitPrice, quantity;
        unitPrice = diskScanner.nextDouble();
        quantity = diskScanner.nextInt();

        [...]

        diskScanner.close();

    }
}

来自控制台的错误消息是:

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.nextDouble(Scanner.java:2413)
    at ReadAndWrite.main(ReadAndWrite.java:16)

那么我该怎么做才能理解这个问题呢?

2 个答案:

答案 0 :(得分:3)

我刚刚在我的机器上进行了测试,但我发现了问题。预期double格式取决于Locale。在某些国家/地区,小数位数用,分隔,有些用.分隔。

    Scanner diskScanner = new Scanner(new File("rawData.txt")).useLocale(Locale.ENGLISH);

将解决问题。否则,请从

更改您的文件
19.5 5

19,5 5

答案 1 :(得分:0)

关于异常的javadoc:

  

由扫描程序抛出,表示检索到的令牌没有   匹配预期类型的​​模式,或者令牌不在   预期类型的​​范围。

如果您非常确定要读取的数据类型,则可以使用特定方法。否则转到.next()方法。返回String

如果要对值进行计算,可以使用Double.valueOf("5.2")Integer.valueOf("5")等解析器解析字符串,并处理try catch块中的解析异常。