package cn.employee;

 import java.io.Serializable;

 public class Employee implements Serializable{
private static final long serialVersionUID = 1L;
private int empNo;
private String name;
private String department; public Employee() {
super();
} public Employee(int empNo, String name, String department) {
super();
this.empNo = empNo;
this.name = name;
this.department = department;
} public int getEmpNo() {
return empNo;
} public void setEmpNo(int empNo) {
this.empNo = empNo;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getDepartment() {
return department;
} public void setDepartment(String department) {
this.department = department;
} public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((department == null) ? 0 : department.hashCode());
result = prime * result + empNo;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
} public String toString() {
return "Employee [empNo=" + empNo + ", name=" + name + ", department="
+ department + "]";
} }

Employee

 package cn.employee;

 import java.util.List;

 public class EmpUtils {

     /**
* 是否有相同的员工编号
*/
public static boolean copy(List<Employee> list,int empNo){
boolean flag = false;
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getEmpNo()==empNo){
flag=true;
break;
}
}
return flag;
} /**
* 添加员工
*/
public static boolean add(List<Employee> list, Employee e) {
if (list.contains(e)) {
System.out.println("有重复的员工");
return false;
}
return list.add(e);
} /**
* 查询所有员工
*/
public static void querys(List<Employee> list) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
} /**
* 查询指定员工
*/
public static void query(List<Employee> list,int empNo){
for(int i=0;i<list.size();i++){
if(list.get(i).getEmpNo()==empNo){
System.out.println(list.get(i));
break;
}
if((i==list.size()-1)&&list.get(i).getEmpNo()!=empNo){
System.out.println("不存在该员工!");
}
}
}
/**
* 删除员工
*/
public static void delete(List<Employee> list,int empNo){
for(int i=0;i<list.size();i++){
if(list.get(i).getEmpNo()==empNo){
list.remove(list.get(i));
System.out.println("删除成功!");
break;
}
if((i==list.size()-1)&&list.get(i).getEmpNo()!=empNo){
System.out.println("删除失败!");
}
}
}
/**
* 修改员工
*/
public static void update(List<Employee> list,int empNo,String name,String department){
for (Employee e : list) {
if(e.getEmpNo()==empNo){
e.setName(name);
e.setDepartment(department);
System.out.println("修改成功!");
break;
}
}
}
}

EmpUtils

 package cn.employee;

 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.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; public class MyEmployee {
Scanner sc = new Scanner(System.in);
List<Employee> list = null;
int empNo;
String name;
String department;
int num = 0;
boolean flag = false;
File file = null;
FileOutputStream fos=null;
ObjectInputStream ois = null;
ObjectOutputStream oos = null; public MyEmployee() throws FileNotFoundException, IOException,
ClassNotFoundException {
list = new ArrayList<Employee>();
fun(list);
} public void fun(List<Employee> list) throws FileNotFoundException,
IOException, ClassNotFoundException {
ok: for (;;) {
printOptions();
num = sc.nextInt(); if (num < 1 || num > 6) {
System.out.println("输入有误,将重新开始选择!");
break ok;
} switch (num) {
case 1:
printEmpNo();
if (!EmpUtils.copy(list, empNo)) {
printName();
if (EmpUtils.add(list,
new Employee(empNo, name, department))) {
addObject(list);//
System.out.println("添加成功!");
}
} else {
System.out.println("添加失败!");
}
break;
case 2:
// EmpUtils.querys(list);
list=queryAllObject();
// System.out.println(list);
break;
case 3:
// System.out.println("3333 "+list);
printEmpNo();
EmpUtils.query(list, empNo);
break;
case 4:
printEmpNo();
EmpUtils.delete(list, empNo);
// System.out.println(list);
addObject(list);
break;
case 5:
printEmpNo();
if (EmpUtils.copy(list, empNo)) {// 有该员工
printName();
EmpUtils.update(list, empNo, name, department);
}
addObject(list);
break;
case 6:
flag = true;
} if (flag) {// 退出
break;
}
}
} public void printOptions() {
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 void printEmpNo() {
System.out.println("请输入员工编号:");
empNo = sc.nextInt();
} public void printName() {
System.out.println("请输入员工姓名:");
name = sc.next();
System.out.println("请输入员工部门:");
department = sc.next();
} /**
* 在向一个文件写入可序列化对象时,每次只想向文件的末尾添加一个可序列化的对象,于是使用了FileOutputStream(文件名,true)
* 间接的构建了ObjectOutputStream流对象
* ,在向外读数据的时候第一次运行的时候不会报错,在第二次就会报java.io.StreamCorruptedException: invalid
* type code: AC错误
*
* 在一个文件都有一个文件的头部和文件体。由于对多次使用FileOutputStream(文件名,true)
* 构建的ObjectOutputStream对象向同一个文件写数据
* ,在每次些数据的时候他都会向这个文件末尾先写入header在写入你要写的对象数据,在读取的时候遇到这个在文件体中的header就会报错
* 。导致读出时,出现streamcorrput异常。
*
* 解决办法:所以这里要判断是不是第一次写文件,若是则写入头部,否则不写入。
*
* @param list
* @throws FileNotFoundException
* @throws IOException
*/
public void addObject(List<Employee> list) throws FileNotFoundException, IOException {
file = new File("src/cn/employee/emp.txt");
// fos=new FileOutputStream(file,true);
fos=new FileOutputStream(file);
if (file.length() < 1) {// 判断文件大小并调用不同的方法
oos = new ObjectOutputStream(fos);
} else {
oos = new MyObjectOutputStream(fos);
}
oos.writeObject(list);
oos.flush();
oos.close();
} @SuppressWarnings("unchecked")
public List<Employee> queryAllObject() throws FileNotFoundException, IOException,
ClassNotFoundException {
ois = new ObjectInputStream(new FileInputStream(
"src/cn/employee/emp.txt"));
List<Employee> list2=new ArrayList<Employee>();
list2 = (ArrayList<Employee>) ois.readObject(); for (int i = 0; i < list2.size(); i++) {
System.out.println(list2.get(i));
} ois.close();
return list2;
}
} /*class MyObjectOutputStream extends ObjectOutputStream {
public MyObjectOutputStream() throws IOException {
super();
} public MyObjectOutputStream(OutputStream out) throws IOException {
super(out);
} @Override
protected void writeStreamHeader() throws IOException {
return;
}
}*/

MyEmployee

 package cn.employee;

 import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream; public class MyObjectOutputStream extends ObjectOutputStream {
public MyObjectOutputStream() throws IOException {
super();
} public MyObjectOutputStream(OutputStream out) throws IOException {
super(out);
} @Override
protected void writeStreamHeader() throws IOException {
return;
}
}

MyObjectOutputStream

 package cn.employee;

 import java.io.FileNotFoundException;
import java.io.IOException; /**
* 员工管理系统
* @author 王恒
* @time 2016年10月19日 下午8:54:14
*/
public class TestEmp { @SuppressWarnings("unused")
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException,NullPointerException { MyEmployee a=new MyEmployee(); }
}

TestEmp

员工管理系统(集合与IO流的结合使用 beta2.0 ObjectInputStream/ ObjectOutputStream)的更多相关文章

  1. 员工管理系统(集合与IO流的结合使用 beta4.0 ObjectInputStream/ ObjectOutputStream)

    package cn.employee_io; import java.io.Serializable; public class Employee implements Serializable{ ...

  2. 员工管理系统(集合与IO流的结合使用 beta3.0 BufferedReader / ObjectOutputStream)

    Employee.java package cn.employee_io; public class Employee { private String empId; private String n ...

  3. 员工管理系统(集合与IO流的结合使用 beta5.0 BufferedReader/ BufferedWriter)

    package cn.gee; public class Emp { private String id;//员工编号 一般是唯一的 private String sname; private int ...

  4. 员工管理系统(集合与IO流的结合使用 beta1.0 ArrayList<Employee>)

    package cn.employee; public class Employee { private int empNo; private String name; private String ...

  5. Java集合、IO流、线程知识

    一.集合: 1. 集合框架: 1)Collection (1)List:有序的,有索引,元素可重复. (add(index, element).add(index, Collection).remov ...

  6. Properties集合与IO流

    package com.itheima.demo07.Prop; import java.io.FileOutputStream; import java.io.FileReader; import ...

  7. Io流阶段大总结

    字节流结构 输入流: ObjectInputStream:从文件中读取对象 FileInputStream:从文件中输入(读)字节 BufferedInputStream:底层有缓冲数组,在不定义数组 ...

  8. Java进阶 | IO流核心模块与基本原理

    一.IO流与系统 IO技术在JDK中算是极其复杂的模块,其复杂的一个关键原因就是IO操作和系统内核的关联性,另外网络编程,文件管理都依赖IO技术,而且都是编程的难点,想要整体理解IO流,先从Linux ...

  9. Java IO流

    File类 ·java.io.File类:文件和目录路径名的抽象表示形式,与平台无关 ·File能新建.删除.重命名文件和目录,但File不能访问文件内容本身.如果需要访问文件内容本身,则需要使用输入 ...

随机推荐

  1. hdu1042 (模拟n!)

    题目大意: 求 n.(可能会超过整数范围,这里用数组模拟n!的值) pid=1042">http://acm.hdu.edu.cn/showproblem.php?pid=1042 A ...

  2. activiti自己定义流程之自己定义表单(二):创建表单

    注:环境配置:activiti自己定义流程之自己定义表单(一):环境配置 在上一节自己定义表单环境搭建好以后,我就正式開始尝试自己创建表单,在后台的处理就比較常规,主要是针对ueditor插件的功能在 ...

  3. Redis Server分布式缓存编程

    这篇文章我将介绍如果用最简洁的方式配置Redis Server, 以及如何使用C#和它交互编程 一. 背景介绍 Redis是最快的key-value分布式缓存之一 缺点: 没有本地数据缓冲, 目前还没 ...

  4. centos 安装mysql时错误unknown variable &#39;defaults-file=/opt/redmine-2.6.0-2/mysql/my.cnf&#39;

    找到my.cnf所在目录.运行 chmod 664 my.cnf,再启动mysql成功

  5. Matplotlib绘图基础

    import matplotlib.pyplot as plt import numpy as np #绘图流程 x=np.linspace(-1,1,100) y=x**2 plt.plot(x,y ...

  6. Boost中的Timer的使用——计算时间流逝

    使用Boost中的Timer库计算程序的运行时间 程序开发人员都会面临一个共同的问题,即写出高质量的代码完毕特定的功能.评价代码质量的一个重要标准就是算法的运行效率,也就是算法的运行时间.为了可靠的提 ...

  7. Android实战简易教程-第四十枪(窃听风云之短信监听)

    近期在做监听验证码短信自己主动填入的功能,无意间想到了一个短信监听的办法. 免责声明:短信监听本身是一种违法行为,这里仅仅是技术描写叙述.请大家学习技术就可以.(哈哈) 本实例是基于bmob提供的后台 ...

  8. PL/SQL Developer导入导出Oracle数据库方法

    前一篇博客介绍了Navicat工具备份Oracle的方法.这篇博客介绍一下使用PL/SQL Developer工具导入导出Oracle数据库的方法. PL/SQL Developer是Oracle数据 ...

  9. NHibernate直接执行SQL进行插入

    有时候,需要用NHibernate直接执行SQL进行数据insert或update. 怎么写呢?简单一点的,可以直接拼凑出来的SQL,这样写: using NHibernate; StringBuil ...

  10. make的特殊之处

    1 规则的先后顺序问题 规则的先后顺序只会影响默认的目标,没有其它的影响. 2 make对具有相同目标的规则的处理方式 2.1 如果是单冒号 只能有一个规则是有命令的,然后对它们进行合并,即依赖合并. ...