Java中的Object流和CommonsIO

Object流|对象流|引用数据类型流;

字节流的功能流

ObjectInputStream-----反序列化输入流

新增方法--Object readObject() 从ObjectInputStream中读取一个对象。 等等

ObjectOutputStream-----序列化输出流

新增方法 void writeObject(Object obj) 将指定的对象写入ObjectOutputStream。

序列化: 将对象数据转为可存储或者可传输的状态的过程

不是所有类型的数据都能序列化 java.io.Serializable(如果写出的对象类型没有实现序列化接口,会遇到运行时异常java.io.NotSerializableException)

1、序列化反序列化顺序保持一致

2、不是所有的属性都需要序列化 transient

3、static的成员不会被序列化

4、如果父类实现类序列化接口,子类所有内容都可以进行序列化

序列号: 当实现了序列化的类型默认存在一个序列号

当类中的成员发生改变,序列号默认会重新生成

作用: 使用序列号可以实现检查前后版本不一致问题

通过快捷键生成序列号:

1.类型必须实现了序列化接口

2.Setting中进行配置

3.双击类名alt+enter,自动生成序列号

 CommonsIO 是apache的一个开源的工具包,封装了IO操作的相关类,使用Commons IO可以很方便的读写文件,url源代码等。(是一个第三方的开源组件)

使用第三方组件的步骤:

1.对应官网中下载源码 jar

2.在项目下新建一个文件夹目录lib,lib下存放以后项目所依赖的所有jar包

3.选中jar包,右键add as lib...

4.在项目下对应类中进行使用

public class Class004_Obect {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //testWrite("D://heihei.txt");
        testRead("D://heihei.txt");
    }

    public static void testRead(String path) throws IOException, ClassNotFoundException {
        //1.构建输入流
        ObjectInputStream is = new ObjectInputStream(new FileInputStream(path));
        //2.读入数据
        Person p = (Person) is.readObject();
        int[] arr = (int[]) is.readObject();
        //3.处理数据
        System.out.println(p);
        System.out.println(Arrays.toString(arr));

        //4.关闭
        is.close();
    }

    //序列化输出
    public static void testWrite(String path) throws IOException {
        //1.定义输出流
        ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(path));
        //2.准备数据
        Person p = new Person("张三",18);
        p.a = 10;
        int[] arr = {1,2,3,4,5};
        //3.写出
        os.writeObject(p);
        os.writeObject(arr);

        //4.刷出
        os.flush();

        //5.关闭
        os.close();

        p.a = 100;
    }
}

class Person implements Serializable {
    private static final long serialVersionUID = -1108656603703788489L;
    private String name;
    private transient int age;
    public static int a ;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = 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;
    }


    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ",a="+a+
                '}';
    }
}

public class Class001_CommonsIO {
    public static void main(String[] args) throws IOException {
        //#### IO工具类IOUtils
        //`IOUtils.copy(InputStream input, OutputStream output) `// 此方法有多个重载方法,满足不同的输入输出流
        IOUtils.copy(new FileInputStream("D://test.txt"),new FileOutputStream("D://xixi.txt"));

        //IO 工具类 FilenameUtils
        //`FilenameUtils.getBaseName(String filename)` // 去除目录和后缀后的文件名
        System.out.println(FilenameUtils.getBaseName("D://test.txt"));
        //`FilenameUtils.getExtension(String filename)` // 获取文件的后缀
        System.out.println(FilenameUtils.getExtension("D://logo.png"));
        //`isExtension(String fileName, String text) `// 判断fileName是否是text后缀名
        System.out.println(FilenameUtils.isExtension("D://logo.jpg","png"));

        //IO 工具类 FileUtils
        //`FileUtils.copyFile(File srcFile, File destFile)` // 复制文件
        FileUtils.copyFile(new File("D://test.txt"), FileUtils.getFile("D://hehe.txt"));

        //`FileUtils.copyFileToDirectory(File srcFile, File destDir)` // 复制文件到一个指定的目录
        FileUtils.copyFileToDirectory(new File("D://test.txt"), new File("D://eee")); //目标路径不存在,也可以帮助创建

        //`FileUtils.writeStringToFile(File file, String data, String encoding, boolean append)`// 指定知否追加
        FileUtils.writeStringToFile(new File("D://test.txt"), "\r\nwangwuwuwuwuwuwuwu", "UTF-8",true);
        //`FileUtils.deleteDirectory(File directory)` // 删除文件夹,包括文件夹和文件夹里面所有的文件
        FileUtils.deleteDirectory(new File("D://DDD"));

        //`FileUtils.copyDirectory(File srcDir, File destDir)` // 复制文件夹(文件夹里面的文件内容也会复制)
        FileUtils.copyDirectory(new File("D://AAA"), new File("D://BBB"));

        //`FileUtils.copyDirectoryToDirectory(File srcDir, File destDir)` // 以子目录的形式将文件夹复制到到另一个文件夹下
        FileUtils.copyDirectoryToDirectory(new File("D://AAA"), new File("D://BBB"));

        //`FileUtils.copyDirectory(File srcDir, File destDir, FileFilter filter)` // 复制文件夹,带有文件过滤功能
        FileUtils.copyDirectory(new File("D://AAA"), new File("D://HAHA"), FileFilterUtils.fileFileFilter());
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值