Java—对象序列化,反序列化,IO框架

本文详细介绍了Java中的IO流文件操作,包括对象序列化与反序列化实例,以及如何使用PrintStream、Properties和第三方库如Apache Commons IO进行高效数据处理。内容涵盖了文件输出、配置文件读写、文件复制和重定向输出等关键技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接上篇:Java-IO流文件操作,编码转换_郑*杰的博客-优快云博客

注意事项,如代码注释

import java.io.Serializable;
//对象想被序列化,需要继承Serializable接口
public class Student implements Serializable {
    public static final long serialVersionUID = 1; // 版本号,序列化前后版本号需要保持一致,如果反序列化因版本号失败,重新序列化一次即可
    private String name;
    // 某个字段不想被序列化,加transient
    private transient String sex;
    private int age;

    public Student(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

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

序列化操作

import java.io.*;

public class ObjectOutstreamdemo {
    public static void main(String[] args) throws Exception {
        Student s = new Student("小明","男" , 10);
        OutputStream out = new FileOutputStream("file-io-serialization\\obj.txt");
        ObjectOutputStream objectout = new ObjectOutputStream(out);//使用对象输出流包装原始流
        objectout.writeObject(s);
        objectout.close();
        System.out.println("序列化成功");

        //反序列化同理
        InputStream in = new FileInputStream("file-io-serialization\\obj.txt");
        ObjectInputStream objectin = new ObjectInputStream(in);
        Student ss = (Student) objectin.readObject();
        System.out.println(ss);
        objectin.close();
        System.out.println("反序列化成功");

    }
}

打印流,写入数据最高效方便


import java.io.*;

public class Printsteamdemo {
    public static void main(String[] args) throws Exception {

        PrintStream ps = new PrintStream("file-io-serialization/write.txt");
        PrintStream ps2 = new PrintStream(new FileOutputStream("file-io-serialization/write.txt",true));
        PrintWriter ps1 = new PrintWriter("file-io-serialization\\write.txt");
        ps.println("任意数据写入");
        ps1.println("任意数据写入");
    }
}

重定向打印流,可以将本来输出到控制台输出到指定文件

import java.io.*;

public class Printsteamdemo {
    public static void main(String[] args) throws Exception {
        PrintStream ps = new PrintStream("file-io-serialization/log.log");
        System.setOut(ps);
        System.out.println("重定向输出");
    }
}

Properties用于读取配置文件


import java.io.FileReader;
import java.io.FileWriter;
import java.util.Properties;

public class Propretiesdemo {
    public static void main(String[] args) throws Exception {
        Properties  p = new Properties();
        p.setProperty("中文","1");
        p.setProperty("B","2");
        p.setProperty("C","3");
        p.setProperty("D","4");
        p.store(new FileWriter("file-io-serialization\\write.properties"),"这是个注释,将键值对保存到配置文件,后缀需要是properties");
        p.load(new FileReader("file-io-serialization\\write.properties"));
        System.out.println("读取内容"+p.getProperty("中文"));
    }
}

第三方IO框架,更加常用,之前文章用于基础了解,可进一步理解IO框架的原理

1、下载第三方jar包:Commons IO – Download Apache Commons IO

 2、解压包得到:commons-io-2.11.0.jar,在项目模块中创建lib目录放入,然后添加到依赖版本即可使用,FileUtils更加方便简洁

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;

import java.io.*;

public class Iouitodemo {
    public static void main(String[] args) throws Exception {
        FileUtils.copyFile(new File("D:\\zhengqinjie\\logback-classic-1.2.3.jar"),new File("D:\\zhengqinjie\\新建文件夹\\3.jar"));
        String reader = FileUtils.readFileToString(new File("D:\\zhengqinjie\\新建文件夹\\1建.txt"),"utf-8");
        System.out.println(reader);
        FileUtils.copyDirectoryToDirectory(new File("D:\\zhengqinjie"),new File("D:\\zhengqinjie1"));
        FileUtils.deleteDirectory(new File("D:\\zhengqinjie1"));
        IOUtils.copy(new FileInputStream("D:\\zhengqinjie\\logback-classic-1.2.3.jar"),new FileOutputStream("D:\\zhengqinjie\\los.3.jar") );
       
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑*杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值