繁体   English   中英

bufferedReader readline = null

[英]bufferedReader readline=null

我试图编写一个将接收文本文件,反转其内容并将其写回的类。 我要执行的方法是在String[]数组中写入行,反转行,然后将文本写回到文本文件。 问题是,当我开始写入String数组时,它只注销空值,并且我知道文本文件不为空。 我正在使用BufferedReader的副本来读取行。 我似乎无法理解我在哪里错。 当我像代码中那样向下初始化String数组textFile时,反转没有问题,但是当我使用

String[] textFile = new String[getNumberOfLines ()]; 

方法,它不起作用。

public void reverse() throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader(WORK_FOLDER_LOCATION + FILE_NAME));
    String[] textFile = new String[3];
    try {
        for (int i = 0; i < textFile.length; i++) {
            textFile[i] = reader.readLine();
            textFile[i] = reverseLine(textFile[i]);
        }
    } catch (IOException e) {
        throw new IOException("There was a problem while operating with the reader.");
    } finally {
        reader.close();
    }
    writeReverseText(textFile);
}

private int getNumberOfLines(BufferedReader reader) throws IOException {
    BufferedReader linesReader = reader;
    int counter = 0;
    try {
        while (linesReader.readLine() != null) {
            counter++;
        }
        linesReader.close();
    } catch (IOException e) {
        throw new IOException("There was a problem while counting the lines");
    }
    return counter;
}

private String reverseLine(String string) {
    StringBuilder reversedString = new StringBuilder(string).reverse();
    System.out.println(reversedString);
    return reversedString.toString();

}

private void writeReverseText(String[] textFile) throws IOException {
    BufferedWriter writer = new BufferedWriter(new FileWriter(WORK_FOLDER_LOCATION + FILE_NAME));
    for (int i = 0; i < textFile.length; i++) {
        writer.append(textFile[i]);
        writer.append(System.lineSeparator());
    }
    writer.close();
}

编辑我设法解决了这个问题,但是更改了getNumberOfLines()方法:

private int getNumberOfLines() throws IOException {
    BufferedReader linesReader = new BufferedReader(new FileReader(WORK_FOLDER_LOCATION + FILE_NAME));

希望这对其他人有所帮助,我很想知道为什么以前的代码不起作用。

您的getNumberOfLines()方法将从BufferedReader读取所有数据-因此,除非您再次开始读取文件,否则将无法读取任何内容,并且对readLine()首次调用将返回null

但是,与其这样做,不如最好只读取一次文件并填充List<String> 例如:

List<String> lines = new ArrayList<>();
String line;
while ((line = reader.readLine()) != null) {
    lines.add(reverseLine(line));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM