Исключение в потоке "main" java.lang.NullPointerException InputStreamReader - PullRequest
0 голосов
/ 01 марта 2012
Exception in thread "main" java.lang.NullPointerException
    at java.io.Reader.<init>(Unknown Source)
    at java.io.InputStreamReader.<init>(Unknown Source)
//at InputStreamReader inStream = new InputStreamReader(fis);

Кроме того, я должен добавить броски IOException, FileNotFoundException к основному или использовать try {} вместо этого?

    System.out.print("Enter the filename: ");

    Scanner stdin = new Scanner(System.in);  //Keyboard input
    String fileName=stdin.nextLine();

    FileInputStream fis = null;
    try {
        fis = new FileInputStream(fileName);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } 
    InputStreamReader inStream = new InputStreamReader(fis);
    BufferedReader in = new BufferedReader(inStream);

Ответы [ 2 ]

5 голосов
/ 01 марта 2012

Вы совершили классическую ошибку: перехватили исключение (в данном случае FileNotFoundException) и фактически не восстанавливались после него. Таким образом, когда открытие файла не удается, вы передаете аргумент null в InputStreamReader(...), и это вызывает NPE.

Кроме того, я должен добавить throws IOException, FileNotFoundException к main или использовать try {} вместо этого?

Это зависит от ваших требований. Вы должны решить, хотите ли вы, чтобы исключения распространялись на main (что, вероятно, придется отказаться), или вы хотите, чтобы текущий метод пытался восстановить. Например, вы можете попросить другое имя файла ...

0 голосов
/ 01 марта 2012

Код работает. Просто проверил это сам. Имя файла, которое вы вводите, не должно быть там.

Кстати, поскольку вы уже используете Scanner для чтения со стандартного ввода, вы также должны использовать Scanner для чтения вашего файла. Я думаю, что BufferedReaders немного неуклюже работать.

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