Как исправить ошибку чтения файла без информации об объектах - PullRequest
0 голосов
/ 17 октября 2019

У меня есть упражнение о записи и чтении файла со списком студентов. Проблема в том, что когда мой файл пуст, метод чтения файла сообщает об этом конце файла, но когда я записываю одного студента в файл, он все равно говорит, что конец файла, даже если мой файл не пустой, содержит информацию об ученикахи я использовал метод вывода, чтобы получить информацию о студентах. Это всегда говорит мне «конец файла» без вывода данных, и я не знаю причину. Я очень ценю с вашей помощью!

public void readFile(ListStudent a) throws FileNotFoundException, IOException, ClassNotFoundException{
        ArrayList<Student> objectsList = new ArrayList<Student>();
        try( ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:\\Files\\Students.txt"))){
            boolean cont = true;

            while(cont){
                Student x = (Student) in.readObject();
                if(x != null)   
                    objectsList.add(x);

                else cont = false;
            }
            a.setArr(objectsList);
            for(Student x : a.getArr())
                x.output();
            in.close();
        }
        catch(EOFException eof){
            System.out.println("End of file");
        }

И способ вывода:

public void output(){
    System.out.format("%-30s%-30s%s\n", this.getName(), this.getBirthday().output(), this.getAvg_score());
}

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Большое спасибо, я понимаю, что я использую работу с ключами, переходную с непониманием, поэтому поля не записываются в мой файл, но я все еще путаюсь с тем, что моя программа выдает исключение java.io.NotSerializableException, даже если я разрешаю реализации класса StudentСериализуемый?

0 голосов
/ 17 октября 2019

Нет ничего плохого в EOFException

Сигналы о том, что конец файла или конец потока был неожиданно достигнут во время ввода.

В приведенном вами примере

Student x = (Student) in.readObject();
if(x != null)   

readObject не вернет ноль при достижении конца файла, будет выброшено EOFException, поэтому, если есть файл сследующее содержимое:

StudentA
StudentB

StudentA и StudentB будут добавлены к objectsList, но при третьем выполнении readObject() выдаст EOFException

Основная проблемаВот как вы обрабатываете это исключение, попробуйте что-то вроде этого:

while(cont){
 try{
   Object x = (Object) in.readObject();
 } catch (EOFException e) {
   cont = false; // or just break
 }
}

Надеюсь, это поможет.

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