Java BufferedReader.readLine()在读取文件时返回null

时间:2015-02-02 14:05:03

标签: java nullpointerexception null bufferedreader

我需要一些帮助。这是我的功能:

public String[] getLines(String filename) {
    String[] returnVal = null;
    int i = 0;

    try {
        BufferedReader br = new BufferedReader(new FileReader(new File(filename)));

        for(String line; (line = br.readLine()) != null; ) {
            // process the line.
            returnVal[i] = line;
            i++;
        }

        br.close();
    }
    // Catches any error conditions
    catch (Exception e)
    {
        debug.error("Unable to read file '"+filename+"'");
        debug.message(e.toString());
    }

    return returnVal;
}

应该返回String []数组,其中包含指定文件中的所有行。但我只得到例外的回报:

java.lang.NullPointerException

当我尝试打印结果时,它为null。有任何想法吗?谢谢!

2 个答案:

答案 0 :(得分:3)

您明确将值设置为null

String[] returnVal = null;

由于您不知道它将包含多少元素,因此您应该使用ArrayList代替 *

ArrayList<String> returnVal = new ArrayList<>();

*请参阅API以了解应该使用哪些方法向其添加对象

答案 1 :(得分:1)

您将returnVal设为null,String[] returnVal = null;并尝试写入。如果您事先知道行数,请将其初始化为returnVal = new String [N_LINES];,并更改循环条件以考虑读取的行数。否则,您可以使用字符串列表并在阅读时附加到它:

List<String> returnVal = new ArrayList<>();
...
while((line = br.readLine()) != null) {
    returnVal.add(line);
}

与原始问题无关,但仍然是:br.close();应位于finally,如果您使用的是1.7,则可以从try-with-resources中受益:

List<String> returnVal = new ArrayList<>();
try(BufferedReader br = 
    new BufferedReader(new FileReader(new File(filename)))) {
    while((line = br.readLine()) != null) {
        returnVal.add(line);
    }
} catch (Exception e) {
    debug.error("Unable to read file '"+filename+"'");
    debug.message(e.toString());
}