1 文件操作类
package cn.lyun.java.io.pim;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import javax.imageio.stream.FileImageInputStream;
/*
* 此类专门用于保存和读取对象
* 因为是对对象的读写,所以使用了对象的序列化进行操作
* 所以在Person类时要实现Serializable接口
*
*/
public class FileOperate
{
private File file =null; //定义一个文件对象
public FileOperate(String pathName) //通过构造方法传递文件的路径
{
this.file = new File(pathName); //实例化File对象
}
public boolean save(Object obj )throws Exception //保存对象
{
ObjectOutputStream oos = null; //对象输出流实例化
boolean falg = false; //定义标志为
try
{
oos = new ObjectOutputStream(new FileOutputStream(this.file)); //实例化对象输出流
oos.writeObject(obj); //对象输出流
falg = true; //改变标志位
}
catch (Exception e)
{
throw e; //异常抛出
}
finally //因为是资源处理 所以无论是否有异常都应该关闭
{
if (oos!= null) { //判断对象输出流对象是否被实例化
oos.close(); //关闭
}
}
return falg;
}
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;
}
}
数据操作类
package cn.lyun.java.io.pim;
import java.io.File;
import java.io.Serializable;
class Operate //定义操作类
{
public static void add() //增加数据操作
{
InputData input = new InputData();
FileOperate fo = new FileOperate("d:\\test.per");
String name = input.getString("请输入姓名:");
int age = input.getInt("请输入年龄", "年龄必须是数字");
Person per = new Person(name,age) ; // 实例化Person对象
try{
fo.save(per) ; // 保存对象
}catch(Exception e){
e.printStackTrace() ;
}
System.out.println("信息增加成功!") ;
}
public static void delete()
{
FileOperate fo = new FileOperate("d:\\test.per");
try {
fo.save(null);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("信息删除成功");
}
public static void update()
{
InputData input = new InputData();
FileOperate fo = new FileOperate("d:\\test.per");
Person per = null;
try {
per=(Person)fo.load(); //读取数据
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
String name = input.getString("请输入新的姓名:(原姓名:"+per.getName()+"):");
int age = input.getInt("请输入新的名年龄:(原年龄:"+per.getAge()+"):", "年龄必须是数字");
per = new Person(name, age);
try {
fo.save(per);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println("信息更新成功");
}
public static void find()
{
FileOperate fo = new FileOperate("d:\\test.per");
Person per = null;
try {
per = (Person)fo.load();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println(per);
}
将数据保存到文档
package cn.lyun.java.io.pim;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.Date;
import java.text.SimpleDateFormat;
public class InputData
{
private BufferedReader buf = null;
public InputData()
{ //实例化BufferedReader对象,
//当后面实例化的时候 就可以直接进行输入操作传值了
this.buf = new BufferedReader(new InputStreamReader(System.in));
}
public String getString(String info) //从方法中得到字符串信息
{
String temp = null;
System.out.print(info);
try {
temp = this.buf.readLine();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return temp;
}
public int getInt(String info,String err) //当调用此方法时 会给两个参数,一个是
//调用此方法时的两个参数
{
int temp = 0; //定义一个temp 用作将input接受进来的字符串进行转换成数字
String str = null; //用作接受
boolean flag = true;
while (flag) {
str = this.getString(info); //此处经过getString()方法 会返回一个temp的值 是从缓存区中读取出来的 即我们自己输入的东西
if (str.matches("^\\d+$")) { //判断是不是数字
temp = Integer.parseInt(str); //将字符串转换成数字
flag = false; //改变标识符
}else {
System.out.println(err);
}
}
return temp; // 返回一个temp
}
public float getFloat(String info,String err)
{ // 得到一个小数的输入数据
float temp = 0 ;
String str = null ;
boolean flag = true ; // 定义一个标记位
while(flag){
str = this.getString(info) ; // 接收数据
if(str.matches("^\\d+.?\\d+$")){ // 判断是否由数字组成
temp = Float.parseFloat(str) ; // 转型
flag = false ; // 结束循环
}else{
System.out.println(err) ; // 打印错误信息
}
}
return temp ;
}
public Date getDate(String info,String err)
{ // 得到一个小数的输入数据
Date temp = null ;
String str = null ;
boolean flag = true ; // 定义一个标记位
while(flag){
str = this.getString(info) ; // 接收数据
if(str.matches("^\\d{4}-\\d{2}-\\d{2}$")){ // 判断是否由数字组成
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ;
try{
temp = (Date) sdf.parse(str) ; // 将字符串变为Date型数据
}catch(Exception e){}
flag = false ; // 结束循环
}else{
System.out.println(err) ; // 打印错误信息
}
}
return temp ;
}
}
Person类
package cn.lyun.java.io.pim;
import java.io.Serializable;
public class Person implements Serializable
{
private String name;
private int age;
public Person(String name, int age) {
this.name= name;
this.age = age;
}
public String toString (){
return "姓名: "+this.name +" 年龄:"+this.age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
显示界面
package cn.lyun.java.io.pim;
public class Menu{
public Menu(){
while(true){
this.show() ; // 无限制调用菜单的显示
}
}
public void show(){
System.out.println("===== Xxx系统 =====") ;
System.out.println(" [1]、增加数据") ;
System.out.println(" [2]、删除数据") ;
System.out.println(" [3]、修改数据") ;
System.out.println(" [4]、查看数据") ;
System.out.println(" [0]、系统退出\n") ;
InputData input = new InputData() ;
int i = input.getInt("请选择:","请输入正确的选项!") ;
switch(i){
case 1:{
Operate.add() ; // 调用增加操作
break ;
}
case 2:{
Operate.delete() ; // 调用删除操作
break ;
}
case 3:{
Operate.update() ; // 调用更新操作
break ;
}
case 4:{
Operate.find() ; // 调用查看操作
break ;
}
case 0:{
System.exit(1) ; // 系统退出
break ;
}
default:{
System.out.println("请选择正确的操作!") ;
}
}
}
};
主方法
package cn.lyun.java.io.pim;
public class ExecDemo01{
public static void main(String args[]) throws Exception{
new Menu() ;
}
};