• Java-IO流之字符流(下篇)


    前面上篇和中篇都是围绕的字节流来进行描述,今天下篇主要围绕字符流,包括字符输入流字符输出流以及处理流异常的几种方式~~

    一、字符流的出现

    中文在GBK中占有两个字节,在utf-8中占有三个字节(即需要三个字节才能组成一个中文字),字节流读取中文时由于编码集的不同,字节流读取中文也比较麻烦,从而出现了字符流
    字符流也在java.io包下
    
    • 1
    • 2

    二、字符输入流Reader

    ①、是一个接口类
    ②、里面提供了一些共性的方法,供子类使用

    方法描述
    int read()读取单个字符并返回
    int read(char[] c)一次性读取多个字符,将数据放入数组
    void close()释放资源

    三、文件字符输入流 FileReader

    ①、FileReader extends InputStreamReader extends Reader
    ②、构造方法

    FileReader(String filename)
    FileReader(File file)

    参数:读取文件的数据源
    作用:创建FileReader对象、把FileReader对象指向要读取的文件

    ③、步骤

    1、创建FileReader对象并绑定数据源
    2、使用对象的read方法读取数据
    3、释放资源
    
    • 1
    • 2
    • 3

    ④、代码编程(读取单个字符)

    import java.io.FileReader;
    import java.io.IOException;
    
    public class ReaderTest {
        public static void main(String[] args) {
            try {
                // 1、创建FileReader对象
                FileReader fr = new FileReader("E:\\JavaCode\\JavaSE\\Day8-24\\src\\a.txt");
                // 2、调用read方法
                int len = 0;
                while ((len = fr.read())!=-1){
                    System.out.println((char)len);
                }
                // 3、释放资源
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    ⑤、代码编程(一次性读取多个字符)

    try {
                // 1、创建FileReader对象
                FileReader fr = new FileReader("E:\\JavaCode\\JavaSE\\Day8-24\\src\\a.txt");
                // 2、调用read方法
                char[] c = new char[1024];
                int len = 0;
                while ((len = fr.read(c))!=-1){
                    System.out.println(new String(c,0,len));
                }
                // 3、释放资源
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    四、字符输出流 Writer

    共性的成员方法

    方法介绍
    void write(int c)写入单个字符
    void write(char[] c)写入字符数组
    abstract void write(char[] c,int off,int len)写入字符数组的某一部分,off为数组的开始索引,len为写入的字符个数
    void write(String str)写入字符串
    void write(String str,int off,int len)写入字符串的某一部分,off为字符开始索引,len为写的字符个数
    void flush()刷新该流的缓冲
    void close()释放资源

    五、文件字符输出流 FileWriter

    ①、FileWriter extends OutputStreamWriter extends Writer
    ②、构造方法

    方法介绍
    FileWriter (File file)根据给定的file对象构造一个FileWriter对象
    FileWriter (String filename)根据给定 的文件名构造一个FileWriter对象

    参数:写入数据的目的地

    ③、使用步骤

    1、创建FileWriter对象,构造方法中绑定要写入数据的目的地
    2、使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)
    3、使用FileWriter中的方法flush,把内存缓冲区中的数据刷新到文件中(必须有这一步)
    4、释放资源
    
    • 1
    • 2
    • 3
    • 4

    ④、代码描述

    import java.io.FileWriter;
    import java.io.IOException;
    
    public class WriterTest {
        public static void main(String[] args) {
            try {
                // 1、创建对象
                FileWriter fw = new FileWriter("E:\\JavaCode\\JavaSE\\Day8-24\\src\\a.txt",true);
                // 2、写入数据
                fw.write("好么");
                // 3、刷新
                fw.flush();
                // 4、释放资源
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    六、close()和flush()的区别

    close()释放资源后不能够再使用流进行相关的操作
    flush()刷新后还能够再操作


    七、换行和续写

    与字节流中的换行和续写一致
    续写:
    在使用构造函数的时候传入两个参数,第一个参数是文件的路径,第二个参数是是否续写(为true表示续写false则表示不续写直接覆盖)
    换行:
    在Windows系统中换行符号为 \r\n
    在linux系统中换行符号为 /n
    在Mac系统中换行符号为 /r


    八、使用try-catch-finally处理流异常

    try{
    	可能会产出异常的代码
    }catch(异常类变量 变量名){
    	异常的处理逻辑
    }finally{
    	一定会执行的代码
    	资源释放
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    今天只进行简单的介绍,后续会专门出一期jdk7和jdk9中处理流异常的对比


    对于文件流的描述分成了上中下三篇,今天已经完成了最后的一篇了,如果介绍有错误,欢迎评论留言~~

  • 相关阅读:
    STM32驱动美上美(SIQ-02FVC3)拨盘编码器硬件
    【Python零基础入门篇 · 7】:列表、元组的相关操作(完整版)
    【C++】空间配置器 allocator:原理及底层解析
    alexnet pytorch模型和onnx模型速度对比
    卖课不挣钱,为什么还要卖?背后原因你绝对想不到
    Qt 日志重定向
    elementplus、vxe、surely 三种表格组件的封装
    css-表头筛选的特定样式
    初识设计模式 - 工厂模式
    SpringBoot开启异步多线程
  • 原文地址:https://blog.csdn.net/qq_52998673/article/details/126513062