java reader结束String为null

时间:2015-11-19 13:57:31

标签: java bufferedreader

我正在使用一种常见的方法来读取java中的文本文件:

public String readIndex() throws IOException{
        if(!fileExisits)
            return "";
        String indexInFile = "";
        while((indexInFile = reader.readLine())!=null){
            indexInFile += reader.readLine();
            System.out.println("indexxxxxxxx: " + indexInFile);
        }
        System.out.println("reader get: " + indexInFile);
        return indexInFile;
    }

,输出为: 是file :: true

indexxxxxxxx: 1fefefe\fefeef
indexxxxxxxx: effe
indexxxxxxxx: effe
indexxxxxxxx: null
reader get: null
null

正如您在最后一行中看到的那样,输出字符串indexInFile被设置为null。 我的读者是:

reader = new BufferedReader(new FileReader(fileName));

任何建议为什么会发生?希望我写下所有相关的代码。

4 个答案:

答案 0 :(得分:2)

遇到最后一行时,以下reader.readLine()将返回零。然后是while循环的条件,将调用赋值indexInFile=null。 while循环将退出,因为(indexInFile=null)==null)

此外,您可以在for循环中使用null,因为您在那里调用了reader.readLine()。我想以下代码将解决您的问题:

public String readIndex() throws IOException{
    if(!fileExisits)
        return "";
    String line;
    String indexInFile = "";
    while((line = reader.readLine())!=null){
        indexInFile += line;
        System.out.println("indexxxxxxxx: " + line);
    }
    System.out.println("reader get: " + indexInFile);
    return indexInFile;
}

答案 1 :(得分:1)

摆脱第二个readLine()

public String readIndex() throws IOException{
    if(!fileExisits)
        return "";
    String indexInFile = "";
    while((indexInFile = reader.readLine())!=null){
        System.out.println("indexxxxxxxx: " + indexInFile);
    }
    System.out.println("reader get: " + indexInFile);
    return indexInFile;
}

您已阅读while条件中的行。因此,当您到达最后一行文本时,您将立即再次阅读nextLine,然后才会突破loop,这将返回null,因为没有更多行。这就是为什么要打印null

答案 2 :(得分:0)

每个循环步骤调用readLine两次。 readLine也会删除尾随的换行符。

    StringBuilder totalText = new StringBuilder();

    String line;
    while ((line = reader.readLine()) != null) {
        totalText.append(line).append("\r\n");
        System.out.println("Line: " + line);
    }
    System.out.println("All: " + totalText.toString());

使用StringBuilder将大大提高速度。

答案 3 :(得分:0)

使用reader.ready()方法检查(所以你也将摆脱加倍的readLine())

public String readIndex() throws IOException{
    if(!fileExisits)
        return "";
    String indexInFile = "";
    while(reader.ready()){
        indexInFile += reader.readLine();
        System.out.println("indexxxxxxxx: " + indexInFile);
    }
    System.out.println("reader get: " + indexInFile);
    return indexInFile;
}