求助!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());
}
}