(Java)在指定文件进行对象序列化,实现单人信息管理系统

  • 导入的java的类
package train;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Scanner;
  • 数据类(以人的类为例)实现可以序列化的接口
class Person implements Serializable{//实现Serializable接口表示Person类可以进行序列化
	private String name ;		
	private int age ;			
	public Person(String name,int age){
		this.setName(name);
		this.setAge(age);
	}
	public String toString(){//覆写toString方法
		return "姓名:" + this.name + ";年龄:" + this.age ;
	}
	public void setName(String name){
		this.name = name ;
	}
	public void setAge(int age){
		this.age = age ;
	}
	public String getName(){
		return this.name ;
	}
	public int getAge(){
		return this.age ;
	}
}
  • 文件操作类,在指定文件实现对象序列化,保存和得到对象
class FileOp{//文件操作类,在指定文件内,进行对象的序列化
	private File file;
	public FileOp(String path){//构造方法
		this.file=new File(path);//按照传入的路径实例化文件对象
	}
	public void save(Object obj)throws Exception{//保存
		ObjectOutputStream oos=null;//对象输入流
		try{
		oos=new ObjectOutputStream(new FileOutputStream(this.file));//实例化对象输入流的对象
		oos.writeObject(obj);//在指定文件内将对象序列化
		}catch(Exception e){
			throw e;
		}finally{
			if(oos!=null){//判断对象输出流对象是否为空,若为空就不存在关闭文件的问题了
				oos.close();
			}
		}
	}
	public Object load()throws Exception{//读出
		Object obj=null;
		ObjectInputStream ois=null;//对象输入流
		try{
		ois=new ObjectInputStream(new FileInputStream(this.file));
		obj=ois.readObject();//将对象反序列化
		}catch(Exception e){
			throw e;
		}finally{
			if(ois!=null){//判断对象输入流对象是否为空,若为空就不存在关闭文件的问题了
				ois.close();
			}
		}
		return obj;
	}
}
  • 具体的操作类,实现具体增,删,查,改的功能
public static void add(){//增加
		Scanner s=new Scanner(System.in);//输入
		FileOp f=new FileOp("d:"+File.separator+"person.txt");
		System.out.println("请输入姓名:");
		String name=s.nextLine();
		System.out.println("请输入年龄:");
		int age=s.nextInt();
		Person p=new Person(name,age);
		try{
			f.save(p);//序列化保存对象
		}catch(Exception e){
			e.printStackTrace();
		}
		System.out.println("保存信息成功!");
	}
	public static void delete(){
		FileOp f=new FileOp("d:"+File.separator+"person.txt");
		try{
			f.save(null);//直接保存空对象就是删除
		}catch(Exception e){
			e.printStackTrace();
		}
		System.out.println("删除成功!");
	}
public static void change(){
		Scanner s=new Scanner(System.in);
		FileOp f=new FileOp("d:"+File.separator+"person.txt");
		Person p=null;
		try{
			p=(Person) f.load();//反序列化读出对象
		}catch(Exception e){
			e.printStackTrace();
		}
		System.out.println("原来的姓名为:"+p.getName()+",请输入新的姓名:");
		String newName=s.nextLine();
		System.out.println("原来的年龄为:"+p.getAge()+",请输入新的年龄:");
		int newAge=s.nextInt();
		Person q=new(newName,newAge);
		try {
			f.save(q);
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("信息修改成功!");
		System.out.println("修改之后的信息为:"+q);
	}
	public static void find(){
		Scanner s=new Scanner(System.in);
		System.out.println("请输入查找人员的姓名:");
		String name=s.nextLine();
		FileOp f=new FileOp("d:"+File.separator+"person.txt");
		Person p=null;
		try {
			p=(Person) f.load();
		} catch (Exception e) {
			e.printStackTrace();
		}
		if(p.getName().equals(name)){//验证名字
			System.out.println("查找成功:\n此人信息为:"+p);
		}else{
			System.out.println("查找失败:不包含"+name+"的信息");
		}
	}
}
  • 菜单类
class PersonMenu{
	public PersonMenu(){//构造方法
		while(true){//无限循环
			this.show();
		}
	}
	public void show(){//菜单显示
		System.out.println("========单人信息管理系统========");
		System.out.println("1.增加");
		System.out.println("2.删除");
		System.out.println("3.修改");
		System.out.println("4.查找");
		System.out.println("0.退出系统");
		Scanner s=new Scanner(System.in);
		System.out.println("请输入您所需操作的序号:");
		int n=s.nextInt();
		switch(n){//分支
		case 1:{
			Operate.add();
			break;
			}
		case 2:{Operate.delete();
			break;
			}
		case 3:{Operate.change();
		    break;
		    }
		case 4:{Operate.find();
		    break;
		    }
		case 0:{
		    System.exit(1);//退出系统
		    break;
		    }
		default:{
			System.out.println("请输入正确的操作序号:");
		}
		}
	}
}
  • 主加载类
public class train2{//主加载类
	public static void main(String args[]){
		new PersonMenu();//实例化菜单对象
	}
}
  • 测试
    增加信息
    修改信息查找信息删除信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byg_qlh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值