Java学习2.25————io流(三)

四、对象专属流
ObjectInputStream
ObjectOutputStream
把流的操作跟Java对象连接起来,主要用于对象的序列化和反序列化
序列化:将内存中的Java对象写到硬盘中
反序列化:从硬盘中读取Java对象

想要一次性序列化多个对象需使用集合,将对象添加到集合中,一个个序列化是不行的。
Serializable 序列化接口,是一个标志性接口,如果Java类想进行序列化,就必须实现这个接口。
序列化版本号 :实现Serializable接口后,会生成序列化版本号,做标识作用,用以区分Java类。
如果进行序列化,此时生成一个序列化版本号,对类进行修改,这时再反序列化会再生成一个序列化版本号,是不行的,因为两个序列化版本号不同。所以可自定义序列化版本号,将序列化版本号写死。

被transient修饰的变量不参与序列化

 private transient String age;

1、ObjectOutputStream

/**
 * 对象流:把流的操作跟Java对象连接起来
 *        主要用于对象的序列化和反序列化
 */
public class IOTest08 {

    public static void main(String[] args) {


        try {
            //创建序列化对象
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("userFile"));

            User user1 = new User("柿","123");
            User user2 = new User("子","123");
            User user3 = new User("牛","123");
            User user4 = new User("啊","123");

            ArrayList<User> users = new ArrayList<>();

            users.add(user1);
            users.add(user2);
            users.add(user3);
            users.add(user4);

            //序列化对象
            objectOutputStream.writeObject(users);

            objectOutputStream.flush();

            objectOutputStream.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }
}

2、ObjectInputStream

public class IOTest09 {

    public static void main(String[] args) {


        try {

            //创建反序列化对象
            ObjectInputStream userFile = new ObjectInputStream(new FileInputStream("userFile"));

            ArrayList<User> o = (ArrayList<User>)userFile.readObject();

            for (User user : o) {

                System.out.println(user);
            }


        } catch (IOException e) {

            e.printStackTrace();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}

五、文件类(File类)

public class IOTest10 {

    public static void main(String[] args) {

        //创建file对象
        File file = new File("io01.txt");

        //判断是否是文件
        System.out.println(file.isFile());
        //判断是否是绝对路径
        System.out.println(file.isAbsolute());
        //获得文件的路径
        System.out.println(file.getPath());
        //获得文件的父级目录
        System.out.println(file.getParent());

        File file1 = new File("E:\\Temp\\io03.java");

        System.out.println(file1.isAbsolute());

        System.out.println(file1.getParent());

        System.out.println(file1.getParentFile());

        //创建多级目录
        File file2 = new File("E:/a/b/c");

        boolean mkdirs = file2.mkdirs();

        System.out.println(mkdirs);

        //获取一个路径下的所有文件
        File file3 = new File("E:\\Temp");

        File[] files = file3.listFiles();

        for (File file4 : files) {

            System.out.println(file4.getAbsolutePath());
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值