栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

IO流(学习Java第24天)(字符缓冲流、打印流、对象序列化和反序列化、Commons IO)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

IO流(学习Java第24天)(字符缓冲流、打印流、对象序列化和反序列化、Commons IO)

目录

一、字符缓冲流

二、打印流概述

 三、对象序列化和反序列化

四、Commons IO


一、字符缓冲流

构造方法

public BufferedReader(Reader in) :创建一个 新的缓冲输入流。 public BufferedWriter(Writer out): 创建一个新的缓冲输出流。

// 创建字符缓冲输入流
BufferedReader br = new BufferedReader(new FileReader("br.txt"));
// 创建字符缓冲输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));

特有方法

BufferedReader:public String readLine(): 读一行文字。 BufferedWriter:public void newline(): 写一行行分隔符,由系统属性定义符号。

public class BufferedWriterDemo {
    public static void main(String[] args) throws IOException{
        //创建字符输出流
        //FileWriter fw = new FileWriter("e://123.txt");
        //创建字符输出流的缓冲流,构造方法中,传递字符输出流
        BufferedWriter bfw = new BufferedWriter(new FileWriter("e://123.txt") );
        bfw.write("第一行");
        //使用方法换行
        bfw.newline();
        bfw.write("第二行");
        bfw.close();
    }
}

 

public class BufferedReaderDemo {
    public static void main(String[] args) throws IOException{
        //创建字符输入流
       // FileReader fr = new FileReader("e:/123.txt");
        //创建字符输入流的缓冲流,构造方法中,传递字符输入流
        BufferedReader bfr = new BufferedReader( new FileReader("e:/123.txt"));
        //缓冲流对象的方法 String readLine 读取文本一行
        String line = null;
        while ( (line = bfr.readLine()) != null){
            System.out.println(line);
        }
        bfr.close();
    }
}

二、打印流概述

打印流是专门负责数据输出打印的流对象,我们经常使用的控制台输出语句System.out.println(),就是打印流实现的输出。System.out的运行结果就是PrintStream打印流对象。

PrintStream继承OutputStream,本质上是字节输出流。PrintWriter继承Writer,本质上是字符输出流。

public class PrintWriterDemo {
    public static void main(String[] args) throws IOException {
        method_2();
    }
    
    public static void  method_2()throws IOException{
        FileOutputStream fos = new FileOutputStream("day12/print.txt");
        //创建打印流对象,开启自动刷新
        PrintWriter pw = new PrintWriter(fos,true);
        pw.println(1);
        pw.close();
    }
    
    public static void method()throws IOException{
        FileOutputStream fos = new FileOutputStream("day12/print.txt");
        //创建打印流对象,构造方法传递字节输出流
        PrintWriter pw = new PrintWriter(fos);
        //打印数据
        pw.println(100);
        pw.close();
    }
}

 三、对象序列化和反序列化

Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据、对象的类型和对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。 

反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。对象的数据、对象的类型和对象中存储的数据信息,都可以用来在内存中创建对象。

ObjectOutputStream类

java.io.ObjectOutputStream类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。

构造方法
public ObjectOutputStream(OutputStream out) : 创建一个指定OutputStream的ObjectOutputStream。
FileOutputStream fileOut = new FileOutputStream("employee.txt");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
序列化方法
public final void writeObject (Object obj) : 将指定的对象写出。

 

序列化操作

一个对象要想序列化,必须满足两个条件:该类必须实现java.io.Serializable接口,Serializable是一个标记接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出NotSerializableException 。该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态(只是使用,不必存储进序列)的,使用transient 关键字修饰。 ObjectInputStream类

ObjectInputStream反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象。

构造方法
public ObjectInputStream(InputStream in) : 创建一个指定InputStream的ObjectInputStream。
如果能找到一个对象的class文件,我们可以进行反序列化操作,调用ObjectInputStream读取对象的方法:
public final Object readObject () : 读取一个对象。
对于JVM可以反序列化对象,它必须是能够找到class文件的类。如果找不到该类的class文件,则抛出一个ClassNotFoundException 异常。 

 

public class Person implements Serializable{
    private String name;
   private  int age;
    static final long serialVersionUID = 100L;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public Person() {
    }
    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 +
                '}';
    }
}
public class ObjectStreamDemo {
    public static void main(String[] args) throws IOException ,ClassNotFoundException{
//        write();
        read();
      
    }
    
    public static void read()throws IOException,ClassNotFoundException{
        //创建反序列化流,构造方法传递字节输入流
        ObjectInputStream ois = new ObjectInputStream( new FileInputStream("day12/person.txt"));
        //读取对象
        Object object =  ois.readObject();
        System.out.println(object);
    }
    
    public static void write()throws IOException{
        //创建序列化流,构造方法传递字节输出流
        ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream("day12/person.txt"));
        Person person = new Person("张三",20);
        //写入对象
        oos.writeObject(person);
        oos.close();
    }
}

四、Commons IO

IO技术开发中,代码量很大,而且代码的重复率较高。如果我们要遍历目录,拷贝目录就需要使用方法的递归调用,也增大了程序的复杂度。

Apache软件基金会,开发了IO技术的工具类`commonsIO`,大大简化IO开发。

添加第三方jar包

Apahce软件基金会属于第三方,(Oracle公司第一方法,我们自己第二方吗,其他都是第三方)我们要使用第三方开发好的工具,需要添加jar包。

jar包:就是Java自己的压缩包,包中是开发好的功能,全部以class文件形态出现,我们添加直接使用即可。

在module下创建文件夹lib将jar包文件复制到lib文件夹中lib文件夹上按鼠标右键,选择Add as Library;level选项:选择moduleCommonsIO的使用

IOUtils类
  静态方法:IOUtils.copy(InputStream in,OutputStream out)传递字节流,实现文件复制。
  静态方法:IOUtils.closeQuietly(任意流对象)悄悄的释放资源,自动处理close()方法抛出的异常。
FileUtils类
  静态方法:FileUtils.copyDirectoryToDirectory(File src,File dest);传递File类型的目录,进行整个目录的复制,自动进行递归遍历。
  静态方法:writeStringToFile(File file,String str)写字符串到文本文件中。
  静态方法:readFileToString(File file)读取文本文件,返回字符串。

 

public class CommonsIODemo {
    public static void main(String[] args)throws IOException {
       // IOUtils.copy(new FileInputStream("e:/1.avi"),new FileOutputStream("e:/copy/1.avi"));
       // FileUtils.writeStringToFile(new File("day12/1.txt"),"你想写什么,就写什么OK?");
        //String string = FileUtils.readFileToString(new File("day12/1.txt"));
       // System.out.println(string);
        FileUtils.copyDirectoryToDirectory(new File("c:/java"),new File("e:/copy"));
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749535.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号