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

时间:2016-04-21 12:26:48

标签: java arraylist

我已经搜索了很多网站,但我找不到了。我正在尝试将.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 个答案:

答案 0 :(得分:0)

我猜你正在寻找Java的 Serializable 接口。为了保存对象,你必须实现它。

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

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

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!");

    }
  }
}

答案 1 :(得分:0)

好的我已经改变了一点(不是每个函数只是读写功能)而且这项工作。 Link to Code。 一个重要的事情是Scanner类不可序列化。因此,您必须将其设置为静态。