Как из Arraylist-а вывести обьекты класса и записать эти обьекты в текстовый файл?
Не могу понять, как из Arraylist-а вывести обьекты класса и записать эти обьекты в текстовый файл.
Ответы (1 шт):
Это плохо сформулированный вопрос, советую на будущее посмотреть местное FAQ.
Допустим, у вас есть класс Cat:
class Cat {
// данные, которые мы хотим записать в файл
private int age;
private String name;
// конструктор
public Cat(int age, String name) {
this.age = age;
this.name = name;
}
// как эти данные будут выглядеть в файле
@Override
public String toString() {
return "Cat{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
И в методе main мы хотим записать все элементы из ArrayList<Cat> в файл, который находится у нас в корне проекта
public static void main(String[] args) {
//Создаем три объекта класса Cat
Cat cat1 = new Cat(1, "name1");
Cat cat2 = new Cat(2, "name2");
Cat cat3 = new Cat(3, "name3");
//Создаем ArrayList и добавляем в него наши объекты
List<Cat> cats = new ArrayList<>();
cats.add(cat1);
cats.add(cat2);
cats.add(cat3);
//Тут мы записываем в файл cats.txt. Если он существует, то мы этот файл перезаписываем
//если его нет, то мы его создаем. Конструкция try-with-resources позволяет нам
//не беспокоиться о закрытии файла вручную.
try(BufferedWriter writer = new BufferedWriter(new FileWriter("cats.txt"))) {
//если мы хотим записать все объекты в виде массива
writer.write(cats.toString());
//если каждый объект по отдельности(\n - перенос строки)
for(Cat c : cats) {
writer.write(c.toString() + "\n");
}
}
catch (IOException ex) {
ex.printStackTrace();
}
}
UPD1
@And заметил, что автор, возможно, имел ввиду процесс сериализации объекта, в таком случае мы можем использовать стандартные средства сериализации Java:
Для начала мы должны дать понять Java, что наш класс(Cat) можно сереализовать. Для этого имплементим интерфейс Serializable:
class Cat implements Serializable {
Теперь вносим изменения в метод записи в файл:
public static void main(String[] args) {
//Создаем три объекта класса Cat
Cat cat1 = new Cat(1, "name1");
Cat cat2 = new Cat(2, "name2");
Cat cat3 = new Cat(3, "name3");
//Создаем ArrayList и добавляем в него наши объекты
List<Cat> cats = new ArrayList<>();
cats.add(cat1);
cats.add(cat2);
cats.add(cat3);
try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("cats.txt"))) {
outputStream.writeObject(cats);
} catch (IOException ex) {
ex.printStackTrace();
}
}
Десериализация в таком случае будет выглядеть так:
try(ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("cats.txt"))) {
List<Cat> cats2 = (List<Cat>) inputStream.readObject();
}
catch(IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}