Последняя прочитанная строка в файле печатается как ноль - PullRequest
0 голосов
/ 03 марта 2012

Я пытаюсь прочитать весь текстовый файл с помощью метода, который я создал.Все строки текстового файла распечатываются так, как я хотел, но самая последняя строка файла, когда он напечатан, отображается как ноль при его распечатке.

private void readFile(String Path) throws IOException{
    String text = ""; //String used in the process of reading a file

    //The file reader
    BufferedReader input = new BufferedReader(
            new FileReader(Path));

    //Creating a new string builder.
    StringBuilder stringBuilder = new StringBuilder();

    while(text != null)
    {
        //Read the next line
        text = input.readLine();

        stringBuilder.append(text); //Adds line of text into the String Builder
        stringBuilder.append(newLine); //Adds a new line using the newLine string
    } 

    //Sets the text that was created with the stringBuilder
    SetText(stringBuilder.toString());
}

Все файлы распечатываются на 100%как следует, за исключением того, что метод добавляет дополнительную строку внизу, которая говорит «null». Как бы я написал код, чтобы эта строка вообще не появлялась?

Ответы [ 3 ]

4 голосов
/ 03 марта 2012

Вы можете изменить это:

    while(text != null)
    {
        //Read the next line
        text = input.readLine();

        // ... do stuff with text, which might be null now
    }

на это:

    while((text = input.readLine()) != null)
    {
        // ... do stuff with text
    }

или это:

    while(true)
    {
        //Read the next line
        text = input.readLine();
        if(text == null)
            break;

        // ... do stuff with text
    }

или это:

    text = input.readLine();
    while(text != null)
    {
        // ... do stuff with text

        //Read the next line
        text = input.readLine();
    }

как вы предпочитаете.

1 голос
/ 03 марта 2012

Ваше условие выхода из цикла находится не в том месте.

while ((text = input.readLine()) != null) {
    stringBuilder.appendText(text)
    ...
0 голосов
/ 03 марта 2012

Используя опережающее чтение, вы получите более чистое решение, которое легко понять:

text = input.readLine();

while(text != null)
    {
        stringBuilder.append(text); //Adds line of text into the String Builder
        stringBuilder.append(newLine); //Adds a new line using the newLine string

        //Read the next line
        text = input.readLine();
    } 

Используя принцип опережающего чтения, вы почти всегда можете избежать плохих условий выхода.

...