当前位置: 代码迷 >> Java Web开发 >> 有关对象保存到文件的问题!~
  详细解决方案

有关对象保存到文件的问题!~

热度:220   发布时间:2007-05-04 20:18:19.0
有关对象保存到文件的问题!~

我写了一个通讯录,我写用文件来保存记录,但是我每次重新运行程序的时候数据又会丢失,回到原来的状况,不知道那里出问题了,请指出问题和修改下~说明下为什么!~
程序如下:
import java.io.*;
import java.util.*;
public class TestCallNote {
static HashMap<String,String> hashmap=new HashMap<String,String>();
static Scanner in=new Scanner(System.in);

public static void main(String[] args) {

File file=new File("PhoneBook.txt");
TestCallNote note=new TestCallNote(file);
note.saved(file);
while(true){
System.out.println("输入空为显示全部记录,输入姓名则查找姓名,输入电话号码则查找姓名,输入一个以上的记录则添加记录");
System.out.println("输入exit则退出程序");
note.started();
note.saved(file);
}
}
//打印记录
public void printElement(HashMap hm){
Set keys=hm.keySet();
Iterator it=keys.iterator();
while(it.hasNext()){
Object ok=it.next();
System.out.println("姓名: "+ok+" 号码: "+hm.get(ok));
}
}
//增加记录
public void addElement(CallNote note){
hashmap.put(note.getName(), note.getNumber());
}

//(用主键找值)姓名找号码
public void printElement(HashMap hm,String o){
Set keys=hm.keySet();
Iterator it=keys.iterator();
while(it.hasNext()){
Object ok=it.next();
Object ov=hm.get(ok);
if(ok.equals(o))
System.out.println(ov);
}
}
// (用值找主键组)号码找姓名
public void searchKeys(HashMap hm,String value){
ArrayList al=new ArrayList();
Set keys=hm.keySet();
Iterator it=keys.iterator();
while(it.hasNext()){
Object ok=it.next();
Object ov=hm.get(ok);
if(ov.equals(value)){
al.add(ok);
}
}
if(al.size()!=0){
System.out.println(al);
}
}
//检查电话的合法性
public boolean isNumber(String str){
if(str.length()!=11){
System.out.println("这不是手机号码,手机号码应该为11位数字~");
return false;
}
try{
long l=Long.parseLong(str);
}catch(Exception e){
System.out.println("这不是手机号码,手机号码应该为11位数字~");
return false;
}
return true;
}
//初始化开始
public void started(){
addElement(new CallNote("黄林权","13802439104"));
addElement(new CallNote("王键宁","13725487564"));
addElement(new CallNote("初楷","13325478216"));
addElement(new CallNote("恒毅","13125478562"));
addElement(new CallNote("雄辉","13505485415"));
try{
String start=in.nextLine();
if(start.equals("exit")){
System.exit(0); //输入exit则退出程序
}
if(start.equals("")) printElement(hashmap); //输入空为显示全部记录

if(!(start.equals(""))){//输入姓名则查找姓名,输入电话号码则查找姓名,输入一个以上的记录则添加记录
printElement(hashmap,start);
searchKeys(hashmap,start);
String[] str=start.split(" ");
if(str.length>1){
if(isNumber(str[1])){
addElement(new CallNote(str[0],str[1]));
printElement(hashmap);
}
}
}
}catch(Exception e){
e.printStackTrace();
}
}
//用输出流把记录保存在文件上
public void saved(File file){
try{
// saved(file);
// System.out.println("Save phone book");
FileOutputStream fos=new FileOutputStream(file,true);
ObjectOutputStream out=new ObjectOutputStream(fos);
out.writeObject(hashmap);
// out.writeStreamHeader() ;
// System.out.println("Done");

// FileInputStream fis=new FileInputStream(file);
// ObjectInputStream in=new ObjectInputStream(fis);
// hashmap=(HashMap)in.readObject();

out.close();
// in.close();
}catch(Exception e){
e.printStackTrace();
System.exit(1);
}
}
//用构造函数来初始化输入流
public TestCallNote(File file){
try{
FileInputStream fis=new FileInputStream(file);
ObjectInputStream in=new ObjectInputStream(fis);
hashmap=(HashMap)in.readObject();
in.close();
}catch(Exception e){
e.printStackTrace();
}
}
}

搜索更多相关主题的帖子: 对象  文件  保存  

----------------解决方案--------------------------------------------------------
估计是没有用追加的方式去写文件。
----------------解决方案--------------------------------------------------------
  相关解决方案