Java NullPointerException при использовании scanner.hasNext (); - PullRequest
3 голосов
/ 13 февраля 2020

Я получил следующий код для чтения информации из файла:

import java.io.*;
import java.util.*;

public class Reader {

    private Scanner s;

    public void openFile() {
        try {
            s = new Scanner(new File("file.txt"));
        } catch (Exception e) {
            System.out.println("File not found. Try again.");
        }
    }

    public void readFile() {
        while (s.hasNext()) {
            String a = s.next();
            String b = s.next();
            String c = s.next();
            int d = s.nextInt();
            int e = s.nextInt();
            int f = s.nextInt();
    }

    public void closeFile() {
        s.close();
    }

}

Однако я получаю ошибку NullPointer для ( while (s.hasNext ()) ) и не могу найти решение.

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

РЕДАКТИРОВАНИЕ:

Способ доступа к методам:

public class Tester {

    public static void main(String[] args) {

        Reader read = new Reader();

        read.openFile();
        read.readFile();
        read.closeFile();

    }

}

1 Ответ

3 голосов
/ 13 февраля 2020

В соответствии с оператором, в котором NPE выбрасывает while (s.hasNext()), наиболее вероятно, что s является нулевым указателем, вы можете добавить System.out.println(s); перед этим оператором, чтобы дважды подтвердить его.

И по той причине, что s равен null, есть две возможные причины:

  1. Вы не вызывали openFile до readFile
  2. Исключение выдается при открытии файла. s является только декларацией и еще не указал ни на один объект.

Может быть, для лучшей практики вы можете установить, является ли экземпляр null или нет, прежде чем вызывать его метод. И, насколько я понимаю, readFile зависит от результата openFile, возможно, вы можете установить возвращаемое значение openFile как логическое значение и проверить возвращаемое значение перед дальнейшей операцией открытия файла. Невозможно прочитать файл, который нельзя даже открыть, верно?

import java.io.*;
import java.util.*;

public class Reader {

    private Scanner s;

    public boolean openFile() {
        try {
            s = new Scanner(new File("file.txt"));
            return true;
        } catch (Exception e) {
            System.out.println("File not found. Try again.");
            return false;
        }
    }

    public void readFile() {
        while (s.hasNext()) {
            String a = s.next();
            String b = s.next();
            String c = s.next();
            int d = s.nextInt();
            int e = s.nextInt();
            int f = s.nextInt();
     }
}

Вызывающий может сделать что-то вроде следующего:

Reader reader = new Reader();
if (reader.openFile())
    reader.readFile();
...