2016-11-26 2 views
-1

Я написал программу, которая должна читать внешний файл с использованием классов и FileReader. Он распознает файл и строит его успешно, но не распечатывает содержимое текстового файла, в котором он должен работать. Вот код:Использование BufferedReader и FileReader; Файл читает, но не выводит его содержимое?

Программы

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Scanner; 

public class Lab9 { 

    public static void main(String[] args) { 

     BufferedReader reader = null; 
     String line; 
     Scanner sc = new Scanner(System.in); 

     System.out.println("Please enter a file name to read"); 

     try { 
      reader = new BufferedReader(new FileReader("C:\\Users\\Lee\\Documents\\NetBeansProjects\\Lab9\\" + sc.next())); 
     } catch (FileNotFoundException ex) { 

      System.out.println(ex.getMessage() + "File was not found");   

      try { 
       while ((line = reader.readLine()) != null) 
       { 
        System.out.println(line); 
       } 
      } catch (IOException ex2) { 
       System.out.println(ex2.getMessage() + "File did not read correctly"); 
      } finally { 
       System.exit(0); 
      } 
     } 
    } 
} 

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

содержимого файл

By what initials was Franklin Roosevelt better known?:FDR 
Which number president was Franklin Roosevelt?:32 
Which state was Franklin Roosevelt born in?:New York 
In which year did Roosevelt become Governor of New York?:1929 
What was the name of Franklin Roosevelt's wife?:Eleanor 
How many children did Franklin Roosevelt have?:6 
From which university did Franklin Roosevelt graduate with an A.B in history?:Harvard 
What was the first name of Franklin Roosevelt's 5th cousin, who was also President?:Theodore 
Which disease is believed to be the causes of Franklin Roosevelt's paralysis?:Polio 
At what age did Franklin Roosevelt die?:63 

Actual выход

Please enter a file name to read 
Questions.txt 
BUILD SUCCESSFUL (total time: 6 seconds) 

Любая помощь по решению этой проблемы очень ценится, спасибо.

+0

ли скомпилировать этот код? Ваш первый блокирующий блок не закрылся. или это опечатка? – developer

+1

Подсказка: правильно отформатируйте весь свой код в среде IDE, чтобы отступы вам помогли. Затем посмотрите, где находится ваш цикл while. Я бы предложил удалить * all * ваши заявления try/catch и просто объявить, что ваш метод 'main' может вызывать' IOException' ... –

+0

Я поставил один из скобок в неправильном месте. Пройдя через отступ и форматирование, я нашел ошибку, спасибо. – Adam3920

ответ

0

Вы попытались прочитать файл в ветке исключения для FileNotFoundException. Это означало бы, что ваша программа читает файл, только если он не найден, что не имеет смысла. Вот как это работает:

public static void main(String[] args) { 

    BufferedReader reader = null; 
    String line; 
    Scanner sc = new Scanner(System.in); 

    System.out.print("Please enter a file name to read: "); 

    try { 

     reader = new BufferedReader(
       new FileReader("C:\\Users\\Lee\\Documents\\NetBeansProjects\\Lab9\\" + sc.next())); 

     try { 

      while ((line = reader.readLine()) != null) { 
       System.out.println(line); 
      } 

     } catch (IOException ex) { 
      System.out.println(
        ex.getMessage() + "File did not read correctly"); 
     } finally { 
      try { 
       if (reader != null) 
        reader.close(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 

    } catch (FileNotFoundException ex) { 
     System.out.println("File was not found."); 
    } 

} 

В качестве примечания, вы всегда должны закрыть ресурсы, которые вы используете, в этом случае ваш файл, открытый FileReader, как показано выше в finally отрасли. Кроме того, вам не нужно звонить System.exit(0).

0

первая инструкция catch не имеет конечной скобки, поэтому считыватель файлов находится внутри оператора catch.

0

вы пытались прочитать файл только после того, как был выброшен FileNotFoundException. Также вы должны закрыть ресурсы после их использования. как насчет этого?

public static void main(String[] args) throws IOException { 

    String line; 
    Scanner scanner = new Scanner(System.in); 
    System.out.println("Please enter a file name to read"); 

    try (BufferedReader reader = new BufferedReader(new FileReader("C:\\Users\\Lee\\Documents\\NetBeansProjects\\Lab9\\" + scanner.next()))) { 
     while ((line = reader.readLine()) != null) { 
      System.out.println(line); 
     } 
    } catch (FileNotFoundException fileNotFoundException) { 
     System.out.println(fileNotFoundException.getMessage() + ". File was not found"); 
    } 
} 
0
public static void main(String[] args) throws IOException { 

     BufferedReader reader = null; 
     String line; 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Please enter a file name to read"); 
      reader = new BufferedReader(new FileReader(
        "C:\\Users\\Lee\\Documents\\NetBeansProjects\\Lab9\\" 
          + sc.next())); 
       while ((line = reader.readLine()) != null) { 
        System.out.println(line); 
       } 
     } 
Смежные вопросы