Как из Arraylist-а вывести обьекты класса и записать эти обьекты в текстовый файл?

Не могу понять, как из Arraylist-а вывести обьекты класса и записать эти обьекты в текстовый файл.


Ответы (1 шт):

Автор решения: instahipsta282

Это плохо сформулированный вопрос, советую на будущее посмотреть местное 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();
    }
→ Ссылка