исключение нулевого указателя при попытке загрузить файл с использованием класса File - PullRequest
0 голосов
/ 29 ноября 2011

У меня есть 2 файла Details.java и TestDetails.java и файл данных с именем Details.dat

Details.java

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

public class Details {
    private String path;
    File myFile = new File(path);

    public void setMyFile(String path) {
        this.path = path;

    }

    public void load() throws IOException, FileNotFoundException {
        Scanner input = new Scanner(myFile);

        int numberOfMembers = input.nextInt();

        String[] members = new String[numberOfMembers];

        for (String s : members) {

            String name = input.next();

            String age = input.next();

            String qualification = input.next();

            System.out.println("The name of the family member is " + name + " the age of the family member is" + age
                    + " the qualification of the " + "family member is" + qualification);

        }
    }
}

TestDetails.java

import java.io.IOException;

public class TestDetails {

    public static void main(String[] args) {

        Details myDetails = new Details();

        myDetails.setMyFile(args[0]);

        try {
            myDetails.load();
        } catch (IOException i) {

            System.out.println(i.getMessage());
        }
    }
}

Details.dat

4

a 26 bsc

b 22 bcom

c 50 ba

d 60 bsc

Всякий раз, когда я пытаюсь запустить файл TestDetails.java, я получаю исключение NullPointerException и трассировку стека.направляет трассировку стека к объекту File.

Так в чем здесь проблема?Почему я получаю исключение NullPointerException?

ps в аргументе метода setFile (), я передаю в Details.dat позицию args [0] в командной строке

Ответы [ 4 ]

3 голосов
/ 29 ноября 2011

Проблема заключается в следующем:

public class Details{
    private String path;
    File myFile = new File(path);
    ...

Строка File myFile = new File(path) будет выполнена при построении объекта.Это означает, что path является нулевым во время выполнения этой строки.

Вам следует изменить свой код так, чтобы объект File создавался только тогда, когда он вам нужен.

3 голосов
/ 29 ноября 2011

Сначала вы инициализируете файл, а затем задаете путь к файлу. Попробуйте использовать конструктор в классе Details:

public Details(String path)
        this.path = path;
        myFile = new File(path);
}
0 голосов
/ 29 ноября 2011

Вы пытаетесь создать объект File с путем без инициализации пути. Потому что

File myFile = new File(path); 

строка будет выполнена перед установкой пути и в это время она будет нулевой. Поэтому сначала установите значение path, а затем создайте объект File.

0 голосов
/ 29 ноября 2011
public class Details{
   private  String path;
   File myFile =new File(path);
   ...

Как myFile когда-либо идет, когда его путь имеет значение, отличное от ""?

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