Java面向对象之节点流和处理流

1、节点流和处理流

1.1、基本介绍

在这里插入图片描述

1.2、节点流和处理流一览图

在这里插入图片描述

1.3、节点流和处理流的区别和联系

在这里插入图片描述

1.4、处理流的功能主要体现在以下两个方面

在这里插入图片描述

1.5、处理流-BufferedReader 和 BufferedWriter

在这里插入图片描述

1.5.1、应用案例 1

使用BufferedReader 读取文本文件,并显示在控制台

package reader_;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * bufferedReader 使用
 */
public class BufferedReader_ {
    public static void main(String[] args) throws IOException {
        String filePath = "e:\\a.java";
        // 创建 bufferedReader
        BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
        // 读取
        String line;  // 按行读取, 效率高
        // 说明
        // 1. bufferedReader.readLine() 是按行读取文件
        // 2. 当返回 null 时, 表示文件读取完毕
        while ((line = bufferedReader.readLine()) != null) {
            System.out.println(line);
        }
        // 关闭流, 这里注意只需要关闭 BufferedReader, 因为底层会自动的去关闭 节点流
        // 源码
        /*
        public void close() throws IOException {
            synchronized (lock) {
                if (in == null)
                    return;
                try {
                    in.close();  // in 就是我们传入的 new FileReader(filePath), 关闭了
                } finally {
                    in = null;
                    cb = null;
                }
            }
        }
        */
        bufferedReader.close();
    }
}
1.5.2、应用案例 2

使用BufferedWriter 将“hello, 北京”,写入到文件中

package writer_;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

/**
 * BufferedWriter 的使用
 */
public class BufferedWriter_ {
    public static void main(String[] args) throws IOException {
        String filePath = "e:\\ok.txt";
        // 创建 BufferedWriter
        // 说明:
        // 1. new FileWriter(filePath, true) 表示以追加的方式写入
        // 2. new FileWriter(filePath), 表示以覆盖的方式写入
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath));
        bufferedWriter.write("hello, 北京!");
        bufferedWriter.newLine();  // 插入一个和系统相关的换行
        bufferedWriter.write("hello, 南京!");
        bufferedWriter.newLine();
        bufferedWriter.write("hello, 天津!");
        bufferedWriter.newLine();
        // 说明: 关闭外层流即可, 传入的 new FileWriter(filePath), 会在底层关闭
        bufferedWriter.close();
    }
}
1.5.3、应用案例 3

综合使用 BufferedReader 和 BufferedWriter 完成文本文件拷贝,注意文件编码

package writer_;

import java.io.*;

public class BufferedCopy_ {
    public static void main(String[] args) {
        // 1. BufferedReader 和 BufferedWriter 是安装字符操作
        // 2. 不要去操作 二进制文件[声音,视频,doc, pdf ], 可能造成文件损坏
        // BufferedInputStream
        // BufferedOutputStream
        String srcFilePath = "e:\\a.java";
        String destFilePath = "e:\\a2.java";
        BufferedReader br = null;
        BufferedWriter bw = null;
        String line;

        try {
            br = new BufferedReader(new FileReader(srcFilePath));
            bw = new BufferedWriter(new FileWriter(destFilePath));
            // 说明: readLine 读取一行内容, 但是没有换行
            while ((line = br.readLine()) != null) {
                // 每读取一行, 就写入
                bw.write(line);
                // 插入一个换行
                bw.newLine();
            }
            System.out.println("拷贝完毕...");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭流
            try {
                if (br != null) {
                    br.close();
                }
                if (bw != null) {
                    bw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
1.6、处理流-BufferedInputStream 和 BufferedOutputStream

BufferedInputStream
在这里插入图片描述
在这里插入图片描述
BufferedOutputStream
在这里插入图片描述
在这里插入图片描述

要求:编程完成图片/音乐的拷贝(要求使用Buffered…流)

package outputstream_;

import java.io.*;

/**
 * 演示使用 BufferedOutputStream 和 BufferedInputStream 使用
 * 使用他们, 可以完成二进制文件拷贝
 * 思考: 字节流可以操作二进制文件, 可以操作文本文件吗?当然可以
 */
public class BufferedCopy02 {
    public static void main(String[] args) {
        String srcFilePath = "e:\\a.java";
        String destFilePath = "e:\\a3.java";
        // 创建 BufferedOutputStream 对象 BufferedInputStream 对象
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;

        try {
            // 因为 FileInputStream 是 InputStream 子类
            bis = new BufferedInputStream(new FileInputStream(srcFilePath));
            bos = new BufferedOutputStream(new FileOutputStream(destFilePath));
            // 循环的读取文件, 并写入到 destFilePath
            byte[] buff = new byte[1024];
            int readLen = 0;
            // 当返回 -1 时, 就表示文件读取完毕
            while ((readLen = bis.read(buff)) != -1) {
                bos.write(buff, 0, readLen);
            }
            System.out.println("文件拷贝完毕~~~");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭流, 关闭外层的处理流即可, 底层会去关闭节点流
            try {
                if (bis != null) {
                    bis.close();
                }
                if (bos != null) {
                    bos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
1.7、对象流-ObjectInputStream 和 ObjectOutputStream

在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值