0

我的 UserArchive 类中有这个 arrayList,我的 MainWindow 类中有一个 saveFile() 方法。我的问题是,每次我关闭程序时,src/customerlist.txt 中显示的所有内容都是:¨ÌsrUserArchiveYï≈ùÅ—ÀDLlisttLjava/util/ArrayList;xpsrjava.util.ArrayListxÅ“ô«aùIsizexpw x。

这是我的代码:任何人都可以发现任何问题吗?

public class UserArchive implements Serializable {
ArrayList<User> list = new ArrayList<User>();

public void regCustomer(User u) {
    list.add(u);
}

    public String toString() {
    sorter();
    String users = "";
    Iterator<User> iterator = list.iterator();

    while (iterator.hasNext()) {
        users += iterator.next().toString() + "\n";
    }
    return users;
}

主窗口类:

public class MainWindow extends JFrame {
private SaleWindow sW;
private UserArchive userA;
int customerID = 0;

////

    public void saveFile() {
    try {
        FileOutputStream outStream = new FileOutputStream(
                "src/customerlist.txt");
        ObjectOutputStream utfil = new ObjectOutputStream(outStream);
        utfil.writeObject(userA);
        utfil.close();
    } catch (NotSerializableException nse) {
        JOptionPane
                .showMessageDialog(this, "Objektet er ikke serialisert!");
    } catch (IOException ioe) {
        JOptionPane
                .showMessageDialog(this, "Problem med utskrift til fil!");
    }
}
4

2 回答 2

1

是的,因为 ObjectOutputStream 以二进制形式序列化对象。如果您想以某种 ASCII 形式进行序列化,请尝试使用 JSON 序列化器,例如Jackson

于 2013-04-11T10:44:41.637 回答
0

请看一下 Java 的序列化机制。您不是在编写字符串内容,而是以二进制形式编写字符串对象(和周围的列表)。

如果您只想编写纯文本文件,那么 ObjectOutputStream 是错误的选择。仔细查看 java.io.FileWriter 或 java.io.PrintWriter。

于 2013-04-11T10:55:46.873 回答