Java ObjectOutputStream赢得';我不能保存我的arrayList
我在UserArchive类中有这个arrayList,在MainWindow类中有一个saveFile()方法。 我的问题是,每次我关闭程序时,src/customerlist.txt中显示的所有内容都是: ÌsrUserArchiveYï≈ùÅ-ÀDLlisttLjava/util/ArrayList;xpsrjava.util.ArrayListxÅ«aùIsizexpw 十, 这是我的密码:有人能发现任何问题吗Java ObjectOutputStream赢得';我不能保存我的arrayList,java,arraylist,objectoutputstream,Java,Arraylist,Objectoutputstream,我在UserArchive类中有这个arrayList,在MainWindow类中有一个saveFile()方法。 我的问题是,每次我关闭程序时,src/customerlist.txt中显示的所有内容都是: ÌsrUserArchiveYï≈ùÅ-ÀDLlisttLjava/util/ArrayList;xpsrjava.util.ArrayListxÅ«aùIsizexpw 十, 这是我的密码:有人能发现任何问题吗 public class UserArchive implements
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;
}
////
是的,因为ObjectOutputStream以二进制形式序列化对象。如果您想以某种ASCII形式序列化对象,请尝试使用JSON序列化程序。请看一下Java的序列化机制。您不是在编写字符串内容,而是在编写字符串对象(以及源代码列表)以二进制形式
如果您只想编写纯文本文件,那么ObjectOutputStream是错误的选择。请仔细查看java.io.FileWriter或java.io.PrintWriter。因此,我无法使用ObjectOutputStream保存它?这是我以前一直做的事情。这是一个学校项目,我们假设使用ObjectOutputStream。您可以保存它并使用ObjectOutputStream/ObjectInputStream加载它,但不是以文本形式加载,而是以二进制形式加载,这样只会使您失去将其作为文本文件查看/编辑的能力。如果您想以文本形式存储它,您需要使用FileWriter/FileReader并编写自己的序列化机制。我认为我不需要将其作为文本文件查看/编辑。我所需要的是d是保存它,这样我可以在关闭程序后打开程序时再次将其打印到屏幕上。这样就没有任何问题了,但是使用.bin或其他东西来显示它是二进制文件,并使用ObjectInputStream将其加载回。
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!");
}
}