Java - 从文本文件输入信息时的ArrayIndexOutOfBoundsException

时间:2015-07-26 18:19:23

标签: java exception-handling text-files indexoutofboundsexception filereader

我是Java的初学者(以及一般的编程)。 我正在输入包含以下文本的文本文件中的信息:

  

Gordon Freeman 27

     

Adrian Shephard 22

     

Barney Calhoun 19

     

Alyx Vance 23

我在这个方法中得到了一个ArrayIndexOutOfBoundsException:

private static void readFile2() {

    System.out.println("\nReading from file 2:\n");

    File file = new File("C:/Users/Reflex FN/Documents/IOTest2/text.txt");

    try {

        BufferedReader readFromFile = new BufferedReader(
                new FileReader(file));

        String read = readFromFile.readLine();

        while(read != null) {

            String[] readSplit = read.split(" ");
            int age = Integer.parseInt(readSplit[2]);
            System.out.println(readSplit[0] + " is " + age + " years old.");
            read = readFromFile.readLine();

        }

        readFromFile.close();

    } catch (FileNotFoundException ex) {

        System.out.println("File not found: " + ex.getMessage());

    } catch (IOException ex) {

        System.out.println("IO Exception: " + ex.getMessage());

    }

}

这是第一次工作;它打印出来了:

戈登弗里曼今年27岁。

但是,在打印任何其他内容之前,抛出了ArrayIndexOutOfBoundsException。 我究竟做错了什么? 异常的来源似乎是这一行:

int age = Integer.parseInt(readSplit[2]);

顺便说一句,我是新来的,所以我希望我不会错过这个问题。

谢谢。 :)

2 个答案:

答案 0 :(得分:2)

我想你的text.txt文件中可能有新行。尝试将文件内容更改为 -

Gordon Freeman 27    
Adrian Shephard 22    
Barney Calhoun 19    
Alyx Vance 23

如果你在Gordon Freeman 27和Adrian Shephard 23之间有了新的一行。这将引发以下错误 -

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2

答案 1 :(得分:0)

您的文字文件包含新行。在此声明中,您将获得异常

 int age = Integer.parseInt(readSplit[2]);

将您的代码更改为

   for (String read = readFromFile.readLine(); read != null; read = readFromFile.readLine()) {
            System.out.println(read+"a");
            if(!read.equals(""))//to check whether the line is empty
            {
            String[] readSplit = read.split("\\s+");
            int age = Integer.parseInt(readSplit[2]);
            System.out.println(readSplit[0] + " is " + age + " years old.");    
            }
        }