一、难点主要在序列化存入文本里面!!通过ArrayList数组队列存放对象,再把这个数组通过序列化存入文本里面。代码不难理解,细心看一下就可以啦。(在第二次编译之后,每次编译都会先读取文件内容并赋值到Arraylist数组里面,然后添加的时候就是把对象继续添加到这个ArrayList数组里。再序列化到文本里面)
二、在你调用new FileOutputStream的时候会刷新文本里面的内容的(添加的时候会调用到)!!所以才需要在main方法里面先读取文本数据。
package ex01;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Student implements Serializable{
private static final long serialVersionUID = 1L;
private String number;//序号
private String name;//姓名
private String phone;//手机号码
private String address;//地址
private String email;//邮箱
static final String Files="d:/addressBook.txt";//文件存放的路径
static Scanner input=new Scanner(System.in);//创建静态输入流对象
List<Student> listStudent=new ArrayList<Student>();
static File f=null;
public static void main(String[] args) throws IOException, ClassNotFoundException {
Student a=new Student();
f = new File(Files);//将一个字符串描述的路径,封装成一个File对象。
if(!f.exists())//判断文件是否存在
{
f.createNewFile();//不存在则创建一个文件
}
else
{
a.readStduent();//存在的话就通过反序列化读取数据
}
int n=1;//作为循环条件(1相当于true)
int m;
while(n!=0)
{
menu();
System.out.println("请输入想要进行的操作:");
m=input.nextInt();
switch(m)
{
case 1:
a.add();
break;
case 2:
a.remove();
break;
case 3:
a.modify();
break;
case 4:
a.find();
break;
case 5:
n=0;
break;
}
}
System.out.println("程序退出成功!!");
}
//有参构造函数
public Student(String number,String name,String phone,String address,String email)
{
this.number=number;
this.name=name;
this.phone=phone;
this.address=address;
this.email=email;
}
//无参构造函数
public Student()
{
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
//重写toString方法
public String toString() {
return "[序号:" + number + ", 姓名:" + name + ", 手机号码:" + phone + ", 地址:" + address + ", 邮箱"
+ email + "]";
}
/*
* 通过反序列化从文件里面获取数据
*/
void readStduent() throws FileNotFoundException, IOException, ClassNotFoundException
{
ObjectInputStream ins;
ins=new ObjectInputStream(new FileInputStream(Files));
listStudent=(List<Student>) ins.readObject();
ins.close();
}
/*
* 实现增删改操作的方法
*/
//添加方法
void add()
{
System.out.println("请分别输入序号,姓名,手机号,地址,邮箱");
String number=input.next();
String name=input.next();
String phone=input.next();
String address=input.next();
String email=input.next();
Student s1=new Student(number,name,phone,address,email);
ObjectOutputStream out = null;
try {
listStudent.add(s1);
System.out.println(s1);
out=new ObjectOutputStream(new FileOutputStream(Files));
out.writeObject(listStudent);
} catch (IOException e) {
e.printStackTrace();
}finally
{
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//删除方法(通过姓名删除)
void remove()
{
System.out.println("请输入想要删除的姓名:");
String name=input.next();
for(Student s:listStudent)
{
if(s.getName().equals(name))
{
listStudent.remove(s);
return;
}
}
System.out.println("删除失败,没有找到此人!!");
}
//通过姓名修改个人信息
void modify()
{
System.out.println("请输入想要修改的个人信息的姓名:");
String name=input.next();
for(Student s:listStudent)
{
if(name.equals(s.getName()))
{
System.out.println("请依次输入修改之后的序号,姓名,手机号码,地址,邮箱");
s.setNumber(input.next());
s.setName(input.next());
s.setPhone(input.next());
s.setAddress(input.next());
s.setEmail(input.next());
return;
}
}
System.out.println("修改失败,找不到此人!!");
}
//查找(通过姓名或地址)
void find()
{
System.out.println("请选择想要查找的方法(1、通过姓名查找 2、通过地址查找");
System.out.println("输入方法序号:");
int n=input.nextInt();
switch(n)
{
case 1:
findName();
break;
case 2:
findAddress();
break;
}
}
//通过姓名查找
void findName()
{
System.out.println("请输入姓名:");
String name=input.next();
for(Student s:listStudent)
{
if(s.getName().equals(name))
{
System.out.println(s);
return;
}
}
System.out.println("查无此人!!");
}
void findAddress()
{
System.out.println("请输入地址:");
String address=input.next();
for(Student s:listStudent)
{
if(s.getAddress().equals(address))
{
System.out.println(s);
return;
}
}
System.out.println("查无此人");
}
//菜单方法
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、退出程序 * 〓〓〓〓〓〓〓〓");
}
}