public class Customer {
public static void main(String[] args) throws IOException {
FileOutputStream a = new FileOutputStream("customer.txt");
ObjectOutputStream b = new ObjectOutputStream(a);
human Iman = new human("Iman",5000);
human reda = new human("reda",5555);
b.writeObject(Iman); //prints random symbols.
b.writeObject(reda);
}
}
class human implements Serializable{
private String name;
private double balance;
public human(String n,double b){
this.name=n;
this.balance=b;
}
}
这些随机符号代表什么?
答案 0 :(得分:3)
是的,您正试图存储对象本身,因此存储二进制格式。
要以文本格式实际存储数据,请使用以下代码BufferedWriter,如下所示:
public void writeHumanStateToFile(Human human){
try{
File file = new File("filename.txt");
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(human.getName);
bw.write(human.getBalance);
bw.newLine();
bw.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
我假设你想要坚持Human对象的状态。
答案 1 :(得分:2)
您正在使用ObjectOutputStream
。这不会产生文本 - 它会生成二进制序列化版本的数据。如果您确实需要文本表示,则需要使用不同的方法。
如果您对它是二进制数据没问题,请保持原样 - 但可能会更改文件名以减少误导。您可以使用ObjectInputStream
再次读取数据。
答案 2 :(得分:2)
数据格式在Object Serialization Stream Protocol文档中描述。正如你所指出的那样,它不是人类可读的。
如果您想以可读格式序列化,则可以使用java.beans.XMLEncoder
或类似Pojomatic的内容。
答案 3 :(得分:1)
您正在序列化该对象。它不是以纯文本形式可读,而是一种二进制格式,可以轻松读取对象并在以后的程序执行中重新创建它。
如果要以纯文本格式存储对象,则需要将对象的各个字段写入文件。