2012-03-03 3 views
0

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

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%, как они должны, за исключением метод добавляет дополнительную строку в нижней части, которая говорит «нулевой» Как бы я написать код, чтобы эта линия обыкновение появляться на всех?

ответ

1

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

while ((text = input.readLine()) != null) { 
    stringBuilder.appendText(text) 
    ... 
4

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

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

как пожелаете.

+0

Или инициализировать текст = input.readLine(); один раз перед циклом и снова в конце тела цикла. – jacobm

+1

@jacobm: Верно. , , но кто-то действительно предпочитает это? – ruakh

+0

Я на самом деле немного предпочитаю его, поскольку он наиболее точно соответствует тому, как я объясню, что происходит на английском. (Хотя для этого требуется повторить одну и ту же строку дважды.) – jacobm

0

С помощью упреждающего чтения, вы получите более чистый раствор, который легко понять:

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

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

Смежные вопросы