如何序列化在一个方法中创建的所有ArrayList对象?

时间:2017-07-21 11:31:14

标签: java serialization arraylist

我一直在努力创建一个序列化方法来序列化我现有的所有对象。这就是我所做的:

我的班级:

public class Test implements Serializable{
    ArrayList<TheOtherClass> obj = new ArrayList<>();

    public static void main(String[] args) {
            Test test = new Test();
            test.addTest("This", "Is", "Some");
            test.addTest("Text", "As", "Example");
            test.saveAllArrays();
    }
// omitted code down here.
    public void addTest(String some, String random, String text) {
    obj.add(new TheOtherClass(some, random, text));
}
    public void saveTest(Object obj) throws IOException{
                ObjectOutputStream save = new ObjectOutputStream(new FileOutputStream("SaveFile.bin"));
                save.writeObject(obj);
    }

    public void saveAllArrays(){
        for(TheOtherClass all : obj){
            try {
                saveTest(all);
            } catch (IOException ex) {
                System.out.println(ex.getMessage());
            }
        }
    }

我的对象类:

    public class TheOtherClass implements Serializable{
            private String some;
            private String random;
            private String savedText;

省略了getter和setter方法。

2 个答案:

答案 0 :(得分:0)

目前,您正在为每个序列化对象创建一个新文件,因此除了最后一个之外,您将丢失所有文件。根本不需要序列化多个对象,也不需要遍历数组列表。只需直接保存,也可以直接反序列化。

答案 1 :(得分:0)

这是一个完整的例子。希望它会让你感动。

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class Test implements Serializable {

    private static final String FILE = "SaveFile.bin";

    private List<Item> itemList = new ArrayList<>();

    public class Item implements Serializable {
        private String first;
        private String second;
        private String last;
        public Item(String first, String second, String last) {
            this.first = first;
            this.second = second;
            this.last = last;
        }

        @Override
        public String toString() {
            return first + ", " + second + ", " + last;
        }
    }

    public static void main(String args[]) {
        Test test = new Test();
        if(args.length > 0) {
            try {
                test.loadItemList();
                System.out.println("loaded");
                test.printList();
            } catch (IOException | ClassNotFoundException e) {
                System.out.println(e.getMessage());
            }
        } else {
            test.addItem("1", "2", "done");
            test.addItem("Text", "As", "Example");
            try {
                test.saveItemList();
                System.out.println("saved");
                test.printList();
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
        }
    }

    private void printList() {
        itemList.forEach(System.out::println);
    }

    private void addItem(String first, String second, String last) {
        itemList.add(new Item(first, second, last));
    }

    private void loadItemList() throws IOException, ClassNotFoundException {
        InputStream inputStream = new FileInputStream(FILE);
        ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
        itemList = (List<Item>) objectInputStream.readObject();
    }

    private void saveItemList() throws IOException {
        OutputStream outputStream = new FileOutputStream(FILE);
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
        objectOutputStream.writeObject(itemList);
    }
}