有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法使用类对象写入文件ArrayList

我重新搜索了很多网站,却找不到answear。我想写信给你。txt文件我的ArrayList,它包含类对象。每次我试着做这件事,都会有例外。阅读也是同样的问题。这是我的代码:

public static void write()
{
    try 
    {
        FileOutputStream out = new FileOutputStream("clients.txt");
        ObjectOutputStream oout = new ObjectOutputStream(out);
        oout.writeObject(lista);
        oout.close();
    }
    catch(Exception ioe)
    {
        System.out.println("writing Error!");
        welcome();
    }
}
public static void read()
{

    try
    {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("clients.txt"));
        lista = (List<Client>) ois.readObject();
    }
    catch (ClassNotFoundException ex) 
    {
        System.out.println("Koniec pliku");
    }
    catch(IOException ioe)
    {
        System.out.println("Error!");
        welcome();
    }
}

共 (2) 个答案

  1. # 1 楼答案

    好的,我做了一些改变(不是每个函数,只是读写功能),这项工作。 Link to Code。 重要的一点是Scanner类不可序列化。因此,你必须让它成为静态的

  2. # 2 楼答案

    我猜您正在寻找Java的可序列化接口。为了保存对象,类必须实现它

    问题是:你到底想保存什么?列表的内容,以便您可以将其保存在文件中并在以后加载

    这个简单的例子适用于我(对于我上面提到的场景):

    public class User implements Serializable {
       private static final long serialVersionUID = 1L;
    
       private String name;
       private int age;
    
       public User(String name, int ag) {
          this.name = name;
          this.age = age;
       }
    
       @Override
       public String toString() {
         return (this.name + ' ' + this.age);
       }
    }
    public class Main {
       private static List<User> l;
    
       public static void main(String[] args) {
         l = new ArrayList<User>();
         user1 = new User("John", 22);
         user2 = new User("Jo", 33);
         l.add(user1);
         l.add(user2);
         write();
       }
    
       public static void write() {
          try {
            FileOutputStream fos = new FileOutputStream("testout.txt");
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            oos.writeObject(l);
            oos.close();
        } catch (Exception ioe) {
            System.out.println("writing Error!");
    
        }
      }
    }