关于文件操作的问题,readObject相关。
小弟写了一个可读写文件的程序,可是老是卡在readObject这里,不知为什么,论坛上有相关的帖子,但还是没有看懂,故在此请教!多谢各位先!~~
下面是我的code:
IDNMS.java
import java.io.*;
public class IDNMS implements Serializable
{
public IDNMS()
{
try{
FileOutputStream f=new FileOutputStream("datafile.txt");
ObjectOutputStream o=new ObjectOutputStream(f);
o.close();
}catch(Exception excep){
System.out.println(excep.toString());
}
}
public static void main(String args[])
{
System.out.println("Welcome\n");
// IDNMS init=new IDNMS();
data_Object dt=new data_Object();
Display list=new Display();
InsertDataItem idi=new InsertDataItem();
SearchDataItem sdi=new SearchDataItem();
dt.setData(300294718, "Jeff", "Bluejeff@tom.com");
idi.doInsert(dt);
list.listData();
}
}
class Display implements Serializable
{
public void listData()
{
data_Object dt=new data_Object();
try{
FileInputStream f=new FileInputStream("datafile.txt");
ObjectInputStream o=new ObjectInputStream(f);
do{
dt=(data_Object)o.readObject(); //到这里就卡驻了,错误信息是:“java.io.StreamCorruptedException”
System.out.println(dt);
}while(dt.id>=0);
o.close();
dt.freeData();
}catch(Exception excep){
System.out.println(excep.toString());
}
}
}
class data_Object implements Serializable
{
int id;
String name;
String mail;
public void setData(int iid, String iname, String imail)
{
id=iid;
name=iname;
mail=imail;
}
public void freeData()
{
id=0;
name="";
mail="";
}
public String toString()
{
return "ID: "+id+"\nName: "+name+"\nMail: "+mail+"\n";
}
}
class InsertDataItem implements Serializable
{
public void doInsert(data_Object d)
{
data_Object dt=new data_Object();
dt=d;
try{
FileOutputStream f= new FileOutputStream("datafile.txt", true);
ObjectOutputStream o=new ObjectOutputStream(f);
o.writeObject(dt);
// System.out.println(dt);
o.close();
dt.freeData();
}
catch(Exception excep){
System.out.println(excep.toString());
}
}
}
class SearchDataItem implements Serializable
{
public void doSearch()
{
data_Object dt=new data_Object();
data_Object temp=new data_Object();
try{
FileInputStream f=new FileInputStream("datafile.txt");
ObjectInputStream o=new ObjectInputStream(f);
do{
temp=(data_Object)o.readObject();
if(dt.id==temp.id || dt.name.equals(temp.name) || dt.mail.equals(temp.mail))
System.out.println(temp);
}while(temp.id>0);
o.close();
dt.freeData();
temp.freeData();
}catch(Exception excep){
System.out.println(excep.toString());
}
}
}
请问问题出在哪里?我觉得关键就在readObject为什么不能直接付值给已定义好的Object。
感激不尽。