IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java IO字符流 -> 正文阅读

[Java知识库]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();
            }
        }
    }

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

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:14:58  更:2022-03-08 22:15:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:24:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码