java IO练习

实体类Employee

package entity;

import java.io.Serializable;

public class Employee implements Serializable {

    private static final long serialVersionUID = 1L;
    private String name;
    private String addr;
    private Integer ssn;
    private Integer number;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    public Integer getSsn() {
        return ssn;
    }

    public void setSsn(Integer ssn) {
        this.ssn = ssn;
    }

    public Integer getNumber() {
        return number;
    }

    public void setNumber(Integer number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", addr='" + addr + '\'' +
                ", ssn=" + ssn +
                ", number=" + number +
                '}';
    }
}

测试类代码:

import entity.Employee;

import java.io.*;

public class fileStreamTest2 {

    /*
    * 演示 InputStream 和 OutputStream 用法的例子
    * */
    public static void main(String[] args) /* throws Exception*/{
//        int num = 88;
//        System.out.println((char)num);

         /*
        //以下是输出流,读取的
        InputStream f = new FileInputStream("D:/1.txt");
        //System.out.println(f.read());  //97
        InputStreamReader reader = new InputStreamReader(f,"GBK");
        StringBuffer sb = new StringBuffer();
        while(reader.ready()){
            sb.append((char)reader.read()); //这里如果不强制转换为char 输出的就是一堆数字
        }
        System.out.println(sb.toString());
        reader.close();
        f.close();
        */


         /*
        //以下是输出流,写入
        File  ff = new File("D:/test.txt");
        OutputStream output = new FileOutputStream(ff);
        OutputStreamWriter writer = new OutputStreamWriter(output,"utf-8");
        writer.append("我是");
        writer.append("zhongguo");
        writer.append("人");
        writer.close();
        output.close();


         //读取目录
        String dirname = "D:/yiyon/erpbeidakouqiang";
        File f1 = new File(dirname);
        if(f1.isDirectory()){
            System.out.println("目录:"+dirname);
            String[] s = f1.list();
            for(int i=0;i<s.length;i++){
                //System.out.println(s[i]);
                File f = new File(dirname+"/"+s[i]);
                if(f.isDirectory()){
                    System.out.println(s[i]+"是一个目录");
                }else{
                    System.out.println(s[i]+"是一个文件");
                }
            }
        }else{
            System.out.println(dirname+"不是一个目录");
        }

         //序列化对象
        Employee emp = new Employee();
        emp.setName("jhy");
        emp.setAddr("土右旗");
        emp.setNumber(01);
        emp.setSsn(1003);

        try {
            FileOutputStream opt = new FileOutputStream("D:/SerializableEmp.ser");
            ObjectOutput objOpt = new ObjectOutputStream(opt);
            objOpt.writeObject(emp);
            objOpt.close();
            opt.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
*/

        /**/
        //反序列化对象
        Employee emp2 = null;
        try {
            FileInputStream finput = new FileInputStream("D:\\SerializableEmp.ser");
            ObjectInputStream objInput = new ObjectInputStream(finput);
            emp2 = (Employee) objInput.readObject();
            objInput.close();
            finput.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println(emp2);



    }

    // 删除文件及目录
    public static void deleteFolder(File folder) {
        File[] files = folder.listFiles();
        if (files != null) {
            for (File f : files) {
                if (f.isDirectory()) {
                    deleteFolder(f);
                } else {
                    f.delete();
                }
            }
        }
        folder.delete();
    }


}

附一张菜鸟图:

 

这里要注意以下要点:

readObject() 方法中的 try/catch代码块尝试捕获 ClassNotFoundException 异常。对于 JVM 可以反序列化对象,它必须是能够找到字节码的类。如果JVM在反序列化对象的过程中找不到该类,则抛出一个 ClassNotFoundException 异常。

注意,readObject() 方法的返回值被转化成 Employee 引用。

当对象被序列化时,属性 SSN 的值为 111222333,但是因为该属性是短暂的,该值没有被发送到输出流。所以反序列化后 Employee 对象的 SSN 属性为 0。

 

就是要注意:

1.private static final long serialVersionUID = 1L;  序列化和反序列化需要同一个serialVersionUID

2.transient 是不序列化的

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值