求助!java通讯录小程序!

常春藤 2011-11-24 02:56:31
这是我写的一个控制台的个人通讯录小程序,感觉很奇怪,中午写好的,能跑(能够实现添加,查找等功能),到晚上,想再修改时测试一下老是跑出EOFException的异常(奇怪的是期间有几次又回到了中午能跑的状态。。。)。这个程序实现的功能很简单,添加,查找,删除,显示全部联系人,并且把联系人的信息备份写在一个文件中。请大家帮忙看看,我还有几个“潜在”问题:1,我担心运行之后后面写进文件的信息会把之前写了的给覆盖掉(貌似io测试的时候出现了这种情况);2,乱码问题,测试的时候如果用中文写进文件,再读出来显示在控制台上是乱码的。(我的所有编码都默认是utf-8);3,感觉自己写的每次都要读写整个文件,有没有效率更高的办法(这个问题不着急解决,主要是前面两个,不要求用数据库。。。)
以下是源代码(3个) // 注释里的一些东西是一些等待实现的功能,那个也麻烦大家,就是首要解决前面的问题
// Contact.java

import java.io.Serializable;

public class Contact implements Serializable{
private String name;
private String age;
private String address;
private String phone;
private String qq;
private String email;

public Contact() {}

public Contact(String name, String age, String address, String phone,
String qq, String email) {
this.name = name;
this.age = age;
this.address = address;
this.phone = phone;
this.qq = qq;
this.email = email;
}

public String getName() {
return name;
}

public String toString() {
return "[name]: " + name + ", [age]: " + age + ", [address]: "
+ address + ", [phone]: " + phone + ", [qq]: " + qq + ", [email]: "
+ email;
}
}

// ContactManager.java

import java.io.*;
import java.util.*;

public class ContactManager {
Map<String, Contact> contacts = new HashMap<String, Contact>();
String filePath = "D:/mytxl.txt";

/*public ContactManager() {
try {
new File(filePath).createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}*/

public Contact generateContact() {
Scanner in = new Scanner(System.in);
System.out.println("Please input the contacr's name, age, address, phone, qq and email");
String name = in.nextLine();
String age = in.nextLine();
String address = in.nextLine();
String phone = in.nextLine();
String qq = in.nextLine();
String email = in.nextLine();
return new Contact(name, age, address, phone, qq, email);
}

public boolean addContact(Contact c) {
//Map<String, Contact> contacts = new HashMap<String, Contact>();
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(filePath));
contacts = (Map<String, Contact>) in.readObject();
contacts.put(c.getName(), c);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filePath));
out.writeObject(contacts);
out.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}

public boolean deleteContact(String name) {
//Map<String, Contact> contacts = new HashMap<String, Contact>();
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(filePath));
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filePath));
contacts = (Map<String, Contact>) in.readObject();
contacts.remove(name);
out.writeObject(contacts);
out.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}

public String queryContact(String name) {
//Map<String, Contact> contacts = new HashMap<String, Contact>();
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(filePath));
contacts = (Map<String, Contact>) in.readObject();
for (Object obj : contacts.keySet()) {
if (obj.equals(name)) {
return contacts.get(obj).toString();
}
}
in.close();
} catch (Exception e) {
e.printStackTrace();
return "ERROR!";
}
return "NO THIS PERSON!";
}

public void displayAllContacts() { // fangzhi wenjian wei kong
try {
//FileOutputStream input = new FileOutputStream("d:/test.txt", true);
ObjectInputStream in = new ObjectInputStream(new FileInputStream(filePath));
contacts = (Map<String, Contact>) in.readObject();
System.out.println("name--------age--------address--------phone--------qq--------email");
for (Object obj : contacts.keySet()) {
System.out.println(contacts.get(obj).toString());
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

// ContactImplement.java

import java.util.*;

public class ContactsInplement {


public static void menu() {
System.out.println("--------------------------------");
//System.out.println("--------请选择您想要执行的操作------- ");
System.out.println("--------- 1: 添加联系人 --------");
System.out.println("--------- 2: 查找联系人 --------");
System.out.println("--------- 3: 删除联系人 --------");
System.out.println("--------- 4: 备份联系人 --------");
System.out.println("--------- 5: 查看所有联系人--------");
System.out.println("--------- 6: 退出 --------");
System.out.println("--------------------------------");
}

public static String message() {
Scanner in = new Scanner(System.in);
System.out.println("请输入您想要执行的操作并按回车键结束");
String message = in.nextLine();
return message;
}

public static String getName() {
Scanner in = new Scanner(System.in);
System.out.println("请输入您想要操作联系人的姓名并按回车键结束");
String name = in.nextLine();
return name;
}

public static void implement(String message) {
ContactManager contactManager = new ContactManager();
//contactManager.initStream();
switch (message) {
case "1":
if (contactManager.addContact(contactManager.generateContact())) {
System.out.println("添加成功!");
} else {
System.out.println("添加失败!");
}
break;

case "2":
System.out.println(contactManager.queryContact(getName()));
break;

case "3":
if (contactManager.deleteContact(getName())) {
System.out.println("删除成功!");
} else {
System.out.println("删除失败!");
}
break;

case "4":
System.out.println("==");
break;

case "5":
contactManager.displayAllContacts();
break;

case "6":
System.out.println("您已成功退出!");
break;

default:
System.out.println("您输入的选项有误!");
break;
}
}

public static void main(String[] args) {
//判断是否联系人是否已经存在~~!!!!!!
menu();
implement(message());
}
}
...全文
114 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
红袖添香 2011-11-24
  • 打赏
  • 举报
回复
看了你的描述,代码没看。说下我的想法:首先检查下你存到文件里是用字符流,还是用字节流。要是用字节流的话,显示数据的时候要注意选择合适的方法,其次你担心会把之前的信息覆盖,这个问题你可以在把信息读入文件的时候用追加的方式,试试吧。
微信公众平台企业号开发Java版系列课程,采用java语言细致、详尽、全面地讲解微信企业号开发的相关知识点。该套课程,在微信公众平台深度开发Java版v2.0的基础上,对企业号开发的“回调模式”、“主动调用模式”、“JSAPI模式”分类讲解。贯彻“简单、高效、快捷”的课程特色,采用“一课两知识点”的课程进度,保证课程质量的同时,尽可能的压缩课程时间,让学员“以短的时间,学到多的知识”。课程的知识点包括:建立连接;接收消息与响应消息;被动响应消息;接收事件(菜单事件、关注/取消关注事件、坐标事件、异步任务完成事件);发送消息(消息推送);自定义菜单;OAuth验证;Userid与openid互换;微信JS-SDK接口(重点);企业会话服务(重点);基础样式库(重点);企业号登录授权(重点),等知识点。以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 详情 qq2326321088

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧