Java IO字符流

🧭Java IO流学习
🎉 内容回顾
Java IO流介绍及文件操作
Java IO字节流
📢今天我们进行Java IO字符流的学习,感谢你的阅读,内容若有不当之处,希望大家多多指正,一起进步!!!
♨️如果觉得博主文章还不错,可以👍三连支持⭐一下哦😀

Java IO字符流

字符流

字符流介绍

字符流封装了更加适合操作文本字符的方法

字符流顶层抽象类

Reader:字符输入流超类
Writer:字符输出流超类

字符流 传输单位是字符(在UTF-8编码中一个中文字符占3个字节24bit)
ReaderWriter都属于字节流的超类,也是抽象类,需要子类来实现实例化,Java API中所有以这两个类为后缀名的类都属于字符流
例如:FileReaderFileWriter分别为 文件字符输入流文件字符输出流

字符输入流Reader

public abstract class Reader implements Readable, Closeable 

Reader 是Java中IO库提供的另一个输入流接口。和InputStream的区别: InputStream是一个字节流,以byte为单位读取,而Reader是一个字符流,以char为单位读取,主要用来读取文本字符。

FileReader

以实现类FileReader为例介绍字符输入流

构造函数

 public FileReader(String fileName) throws FileNotFoundException {
        super(new FileInputStream(fileName));
 }
public FileReader(File file) throws FileNotFoundException {
        super(new FileInputStream(file));
}

当传入的文件不存在的时候,运行会抛出FileNotFoundException异常。

read方法

以读取电脑上info.txt文件为例,路径为: “e:\Java\info.txt”
在这里插入图片描述

1. int read() 每次读取一个字符 返回类型是int,范围0~65535,如果读取到文件结尾:返回 -1
代码示例

	@Test
    public void fileReader01() {
        String filePath = "e:\\Java\\info.txt";
        FileReader fileReader = null;
        try {
            fileReader = new FileReader(filePath);
            int read = 0;
            //循环读取 使用 read, 单个字符读取
            while ((read = fileReader.read()) != -1) {
                System.out.print((char) read);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {//关闭流,释放资源
            if (fileReader != null) {
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

运行结果:
在这里插入图片描述
2. int read(char cb[]) 将输入流读取到char数组中返回结果表示读取的数据个数,如果读取到文件结尾,返回 -1
代码示例

 @Test
    public void fileReader02() {
        String filePath = "e:\\Java\\info.txt";
        FileReader fileReader = null;
        try {
            fileReader = new FileReader(filePath);
            char[] chars = new char[3];
            int readLength = 0;
            //循环读取 使用 read(buf), 返回的是实际读取到的字符数
            //如果返回-1, 说明到文件结束
            while ((readLength = fileReader.read(chars)) != -1) {
                System.out.print((new String(chars,0,readLength)));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {//关闭流,释放资源
            if (fileReader != null) {
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

运行结果:
在这里插入图片描述
3. int read(char cbuf[], int offset, int length) 批量读取数据,
将数据读取到char数组中,从offset位置开始,读取length长度范围:offset + length <= cbuf.length
返回值表示数据的个数
如果读取到文件结尾,返回 -1
代码示例

    @Test
    public void fileReader03() {
        String filePath = "e:\\Java\\info.txt";
        FileReader fileReader = null;
        try {
            fileReader = new FileReader(filePath);
            char[] chars = new char[3];
            int readLength = 0;
            //如果返回-1, 说明到文件结束
            while ((readLength = fileReader.read(chars,0,chars.length)) != -1) {
                System.out.print((new String(chars,0,readLength)));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {//关闭流,释放资源
            if (fileReader != null) {
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

运行结果:
在这里插入图片描述

字符输出流Writer

public abstract class Writer implements Appendable, Closeable, Flushable

Writer 是字符输出流,和OutputStream类似,不同点在于OutputStream是操作byte字节流,Writer是操作char字符流
实现Appendable接口,使该类具有内容追加功能
实现Flushable接口,该类具有flush功能,强制将缓冲数据刷入磁盘或发送至网络

FileWriter

构造方法

覆盖模式,相当于流的指针在首端

FileWriter(File/String)

追加模式,相当于流的指针在尾端

FileWriter(File/String,true)

write方法

以往电脑上java.txt文件写入数据为例,路径为: “e:\Java\java.txt”

在这里插入图片描述
🚀 【注意】
FileWriter 使用后,必须要 关闭 (close)或者 刷新 (flush),否则写入不到指定的文件!!!

1. void write(int c) 每次写入单个字符
代码示例

	@Test
    public void FileWriter01() {
        String filePath = "e:\\Java\\java.txt";
        FileWriter fileWriter = null;

        try {
            fileWriter = new FileWriter(filePath);
            fileWriter.write('a');//写入单个字符
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileWriter != null) {
                    fileWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

运行结果:
在这里插入图片描述
2. void write(char cbuf[]) 写入字符数组
代码示例

@Test
    public void FileWriter02() {
        String filePath = "e:\\Java\\java.txt";
        FileWriter fileWriter = null;

        try {
            fileWriter = new FileWriter(filePath);
            char[] chars = {'h','e','l','l','o'};
            fileWriter.write(chars);//写入字符数组
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileWriter != null) {
                    fileWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

运行结果:
在这里插入图片描述

3. void write(char cbuf[], int off, int len) 写入字符数组的指定部分,从off位置开始,读取len长度写入
代码示例

    @Test
    public void FileWriter03() {
        String filePath = "e:\\Java\\java.txt";
        FileWriter fileWriter = null;

        try {
            fileWriter = new FileWriter(filePath);
            char[] chars = {'天','下','第','一'};
            fileWriter.write(chars,2,2);//写入字符数组的指定部分
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileWriter != null) {
                    fileWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

运行结果:
在这里插入图片描述

4. void write(String str) 写入字符串到字符输出流
代码示例

 @Test
    public void FileWriter04() {
        String filePath = "e:\\Java\\java.txt";
        FileWriter fileWriter = null;

        try {
            fileWriter = new FileWriter(filePath);
            String str = "你好,Java~~~";
            fileWriter.write(str);//写入字符串
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileWriter != null) {
                    fileWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

运行结果:
在这里插入图片描述

5. void write(String str, int off, int len) void write(String str, int off, int len)写入字符串数组,从off位置开始,写入len长度

代码示例

    @Test
    public void FileWriter05() {
        String filePath = "e:\\Java\\java.txt";
        FileWriter fileWriter = null;

        try {
            fileWriter = new FileWriter(filePath);
            String str = "你好,Java~~~";
            fileWriter.write(str,0,2);//写入字符串的指定部分
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileWriter != null) {
                    fileWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

运行结果:
在这里插入图片描述
append方法
append 方法,追加内容,例如往java.txt文件中追加内容,路径为: “e:\Java\java.txt”
在这里插入图片描述

代码示例

 @Test
    public void FileWriter06() {
        String filePath = "e:\\Java\\java.txt";
        FileWriter fileWriter = null;

        try {
            fileWriter = new FileWriter(filePath);
            fileWriter.write('a');//写入单个字符
            fileWriter.append('b').append('c').append('d');//追加内容,可连续追加
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileWriter != null) {
                    fileWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

运行结果:
在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WYSCODER

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

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

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

打赏作者

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

抵扣说明:

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

余额充值