尝试读取data.txt文件并进行计算

时间:2015-02-05 21:05:34

标签: java bufferedreader filereader

我使用Integer.parseInt()将每行data.txt的String变量更改为int数据类型。 data.txt文件如下所示:

5
6
3
5
0

......等等。我在文本文件中也没有空格,所以我应该能够完美地解析每一行的字符串。我也没有在文本文件的结尾或开头有一个额外的空行。这是错误消息:

Exception in thread "main" java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)

代码:

public static int[][][] readFile() throws IOException{
    int[][][] hero = new int[2][2][9];

    try(BufferedReader br = new BufferedReader(new FileReader("data.txt")))        {
        String line = br.readLine();
        int num;
        while (line != null) {
            for (int i=0;i<2;i++){
                for (int j=0;j<2;j++){
                    for (int k=0;k<9;k++){
                        line = br.readLine();
                        num = Integer.parseInt(line);
                        hero[i][j][k] = num;
                    }
                }
            }
        }
    }
    return hero;
}

3 个答案:

答案 0 :(得分:2)

文件末尾提供了

null。你应该在检测到时退出你的循环:

line = br.readLine();
if (line == null) break;

答案 1 :(得分:0)

我能够非常轻松地找到该错误,当你得到 NullPointerException 时,总是尝试在控制台中将其打印出来然后再做一些事情,以确保。我刚刚在System.out.println(line)之前添加了Integer.parseInt(),请记住这样做,这将使您的生活更加轻松。

答案 2 :(得分:0)

你得到null因为你的data.txt上有5行你正在读新行37次(在循环之前一次,在三次循环中读36次)。正如robert所说,您应该使用break或设置更改代码执行的顺序来摆脱循环。此外,您的第一个读取行未分配给您的num变量。尝试改为:

try(BufferedReader br = new BufferedReader(new FileReader("data.txt")))        {
    String line = br.readLine();
    int num;
    while (line != null) {
        for (int i=0;i<2;i++){
            for (int j=0;j<2;j++){
                for (int k=0;k<9;k++){
                    if(line==null){
                        k=9;
                    }
                    num = Integer.parseInt(line);
                    line = br.readLine();
                    hero[i][j][k] = num;
                }
            }
        }
    }
}