ObjectOutputStream obs=null;
Person person=null;
try {
obs=new ObjectOutputStream(new FileOutputStream("F:\\Javax学习\\s.txt"));
person=new Person("张三", 21, 95001);
obs.writeObject(person.toString());
obs.flush();
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
ObjectInputStream obi=null;
try {
obi=new ObjectInputStream(new FileInputStream("F:\\Javax学习\\s.txt"));
String str=obi.readObject().toString();
if(str!=null)
System.out.println("名字:"+person.getName()+";身份证:"+person.getIdCard());
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}

}}
class Person implements Serializable{
private String name;
private int age;
private int idCard;
Person(String name,int age,int idcard){
this.name=name;
this.age=age;
this.idCard=idcard;
}
@Override
public String toString() {
return this.name+this.idCard;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIdCard() {
return idCard;
}
public void setIdCard(int idCard) {
this.idCard = idCard;
}执行完程序以后查看文本文件显示乱码,但是执行反序列化后可以正常输出:
名字:张三;身份证:95001
问题来了:能不能用文本文件查看内容?(Ps:新手学Java,如有错误请多指教)

解决方案 »

  1.   

    你将String作为一个Object来写入文件肯定打开是按照java序列化格式写入文件啦.用文本查看器看到的肯定不是一个String的输出格式.
      

  2.   

    如果你要文件可以正常浏览.那么就直接用BufferedWriter来写入文件.
      

  3.   

    序列化以后,这些东西就变成一串十六进制数据了,你打开文本编辑器十六进制被转为ASCII就是乱码。
    class文件也是一堆十六进制,用文本编辑器打开看也是各种乱码。
      

  4.   

    ObjectOutputStream/ObjectInputStream 是基于二进制流的序列化,序列化之后内容只是二进制数据,另外,它们不专门为文件准备的,可以直接输出到 socket 流,那些是给机器读写的,没必要整成人能看懂的文本文件如果想序列化为文本文件,可以使用 xml 序列化,参考 Marshaller/Unmarshaller 类
      

  5.   

    用FastJSON之类的库来转成文本,存在文件里就可以了。或者用5楼说的,xml。。
      

  6.   

    obs.writeObject(person.toString());
    应修改为:
    obs.writeObject(person);
    同样:
    String str=obi.readObject().toString();
    应修改为:
    person=(Person)obi.readObject();