簡體   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