| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 633 人关注过本帖
标题:有关对象保存到文件的问题!~
只看楼主 加入收藏
qsrock
Rank: 1
等 级:新手上路
帖 子:255
专家分:0
注 册:2005-12-29
收藏
 问题点数:0 回复次数:1 
有关对象保存到文件的问题!~

我写了一个通讯录,我写用文件来保存记录,但是我每次重新运行程序的时候数据又会丢失,回到原来的状况,不知道那里出问题了,请指出问题和修改下~说明下为什么!~
程序如下:
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();
}
}
}

搜索更多相关主题的帖子: 对象 文件 保存 
2007-05-04 20:18
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
估计是没有用追加的方式去写文件。

我的msn: myfend@
2007-05-04 22:34
快速回复:有关对象保存到文件的问题!~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014132 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved