Как записать объекты из файла в коллекцию?

Рейтинг: -1Ответов: 1Опубликовано: 20.01.2023

коллеги! Прошу помощи в записи объектов из файла в коллекцию. Объекты известны и уже записаны в файл из другой коллекции. Условно, нужно "достать" объекты из файла и записать в коллекцию. Код ниже не работает, увы сразу переходит на Excepltion. Спасибо заранее!

        FileInputStream fi = new FileInputStream("myObjects.txt");
        ObjectInputStream oi = new ObjectInputStream(fi);

        ArrayList<People> temp = new ArrayList();

        while (oi != null) {
            oi.readObject();
            temp.add((People) oi.readObject());
        }

        System.out.println(temp);

        fi.close();
        oi.close();

    } catch (FileNotFoundException e) {
        System.out.println("File not found");
    } catch (IOException | ClassNotFoundException e) {
        System.out.println("Error initializing stream");
    }

Ответы

▲ 0

Основные проблемы в коде -- бесконечный цикл при попытке чтения сериализованных данных, который скорее всего приводит к перехваченному исключению EOFException.

Будет предупреждение о "сыром" типе списка в присваивании. Также следует использовать try-with-resources для автоматического закрытия открытых потоков ввода/вывода.

Если задача состоит в чтении каждого второго сериализованного элемента в список (допустим, во входном файле только каждый второй объект является экземпляром People):

public static List<People> readPeopleFile(String file) {
    List<People> temp = new ArrayList<>();

    try(ObjectInputStream oi = new ObjectInputStream(new FileInputStream(file))) {

        Object read;
        boolean second = false;

        while ((read = oi.readObject()) != null) {
            if (second) {
                temp.add((People) read);
            }
            second = !second;
        }

        System.out.println(temp);
    } catch (FileNotFoundException e) {
        System.out.println("File not found: " + e.getMessage());
        e.printStackTrace();
    } catch (EOFException e) {
        System.out.println("File reading completed!");
    } catch (IOException | ClassNotFoundException e) {
        System.out.println("Error reading stream: " + e.getMessage());
        e.printStackTrace();
    }
    return temp;
}