Исключение нулевого указателя в Java при чтении файла - PullRequest
0 голосов
/ 11 июня 2018

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

Exception in thread "main" java.lang.NullPointerException at PageRank$ReadInput.ReadFile(PageRank.java:29) at PageRank.main(PageRank.java:58)

Пожалуйста, помогите мне исправить эту ошибку.

public class PageRank{
public static class ReadInput{
    private Scanner x;
    public void OpenFile(){
        try {
            File file  = new File("input.txt");
            Scanner x=new Scanner(file);
       }
        catch(Exception e){
            System.out.println("File does not exist.");
        }


    }
    public void ReadFile() {
        while (x.hasNextLine() ) {
            String s = x.nextLine();
            System.out.println(s);
            String s1 = x.nextLine();
            String s2 = x.nextLine();
            System.out.println(s);
            System.out.println(s1);
            System.out.println(s2);
        }
    }

    }
public static void main(String[] args)throws Exception
    {
    ReadInput P = new ReadInput();
    P.OpenFile();
    P.ReadFile();
      }

}

1 Ответ

0 голосов
/ 11 июня 2018

В OpenFile () внутри блока try вы должны удалить «Сканер» в

Scanner x=new Scanner(file);

и оставить его как

x=new Scanner(file);

Объяснение:

В вашем коде, когда вы пишете

Scanner x=new Scanner(file);

внутри блока try, вы создаете новую переменную, но с тем же именем, что и то, которое вы объявили в началекласс в

private Scanner x;

Теперь у вас будет две переменные сканера с именем 'x'.Внутри оператора try вы инициализируете тот, что находится внутри этого блока, но он существует только там, поэтому, как только вы выходите из блока try, он уничтожается.

Теперь вернемся к функции ReadFile (), которую вы вызываете x .hasNextLine (), но этот 'x' - это тот, который вы объявили в начале, а не тот, что внутри оператора try, поэтому он все еще неинициализирован.

...