Java BufferedReader.readLine() 读取文件时返回空值

Java BufferedReader.readLine() returning null when reading file

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

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;
}

哪个应该 return me String[] 数组,其中包含指定文件中的所有行。但我只得到异常 return:

java.lang.NullPointerException

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

您明确地将值设置为 null

String[] returnVal = null;

由于您不知道它将包含多少个元素,因此您应该使用 ArrayList 而不是 *:

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

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

你有 returnVal 为空,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());
}