bufferedReader readline=null

im trying to write a class where it would take a text file,reverse its contents and write it back. The way i want to do it is to write the lines in a String[] array,reverse the lines and then write the text back to the text file. Problem is, when I start writing to the String array, it writes off only nulls and i know the text file is not empty. Im using a copy of the BufferedReader to read the lines. I can't seem to understand where am i wrong. When I initialize the String array textFile like down in the code, i have no problems reversing, but when i use the

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

method, it doesnt work.

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

EDIT I managed to solve the issue but changing the getNumberOfLines() method:

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

Hope this helps to the others, i would love to know why the previous code didn't work.

Jon Skeet
people
quotationmark

Your getNumberOfLines() method will read all the data from the BufferedReader - so unless you start reading the file again, there's nothing to read, and the very first call to readLine() will return null.

However, instead of doing this, you'd be better off just reading the file once, and populating a List<String>. For example:

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

people

See more on this question at Stackoverflow