如何解析JAVA中文本文件的输入?

时间:2016-03-28 06:58:56

标签: java parseint numberformatexception

我尝试从input.txt文件中解析String,但每次都会抛出NumberFormatException。我已经添加了目前为止的所有代码。 我也试过.trim。我是Java中的文本文件的新手;因此,我不知道这里有什么问题。但是,任何一点帮助将不胜感激。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;
import java.util.Scanner;

public class Lab5_Exceptions_Redo extends Exception {

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

        String file = "inputt.txt";
        String file1 = "outputt.txt";
        String file2 = "errorr.txt";

        PrintWriter errorr = new PrintWriter(file2);

        PrintWriter inputt = new PrintWriter(file);
        inputt.println(15951);
        // int whatever = Integer.parseInt(file);
        // System.out.print(whatever);
        inputt.close();
        Scanner scan = new Scanner(file);
        String number = scan.nextLine();
        int num = Integer.parseInt(number.trim());
        System.out.printf("%d", num);

        PrintWriter outputt = new PrintWriter(file1);
        outputt.println(num);
        outputt.close();
        // inputt.close();

        scan.close();
        // System.out.printf("%d", num);

        try {

        } catch (InputMismatchException e) {
            errorr.println("There was an input mismatch error.");
        } catch (NoSuchElementException e) {
            errorr.println("There is no such element.");
        } catch (UnsupportedOperationException e) {
            errorr.println("An unsupported operation occured.");
        } catch (NumberFormatException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
        errorr.close();

    }
}

2 个答案:

答案 0 :(得分:4)

你犯了一个错误。在Scanner构造函数中,您应该传递File对象而不是String对象。因为你正在传递字符串" inputt.txt"它试图解析这个字符串,结果你得到了NFE。 试试这个

Scanner scan = new Scanner(new File(file));

答案 1 :(得分:0)

在执行nextLine()时,您必须获得空白和输入。使用trim()函数去掉任何空格。

int num = Integer.parseInt(number.trim());

或者,您可以尝试使用nextInt()代替nextLine()

以下是parseInt()的JAVA文档:

  

将字符串参数解析为带符号的十进制整数。字符串中的字符必须都是十进制数字,除了第一个字符可以是ASCII减号' - '('\ u002D')表示负值或ASCII加号'+'('\ u002B')表示正值。返回结果整数值,就像参数和基数10作为parseInt(java.lang.String,int)方法的参数一样。