Как записать объекты из файла в коллекцию?
коллеги! Прошу помощи в записи объектов из файла в коллекцию. Объекты известны и уже записаны в файл из другой коллекции. Условно, нужно "достать" объекты из файла и записать в коллекцию. Код ниже не работает, увы сразу переходит на 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");
}
Ответы (1 шт):
Основные проблемы в коде -- бесконечный цикл при попытке чтения сериализованных данных, который скорее всего приводит к перехваченному исключению 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;
}