深入理解Java IO流:字符流

深入理解Java IO流:字符流

引言
在Java中,IO(输入/输出)操作是程序与外部世界交互的重要方式。
其中,File类是进行文件操作的基础,而字节流和字符流则是数据传输的两种主要方式。
本文将深入探讨这些概念及其应用。

一、字节流读取中文问题

  1. 字节流是万能流,更侧重于文件复制,但是尽量不要边读边看
  2. 原因:
    • UTF-8:一个汉字占3个字节
    • GBK:一个中文占2个字节

如果按照字节读取,每次读取的字节没有构成一个汉字的字节数,就直接输出,汉字是显示不了的

  1. 解决方法:
    • 将文本文档中的内容,按照字符去操作

二、FileReader 字符输入流

字符流专门去操作文本文档,但是复制操作不要用字符流
  1. 概述:
    • 字符输入流: Reader 抽象类
      • 子类:FileReader
  2. 作用:
    • 将文本文档中的内容读取到内存中来
  3. 构造:
    • FileReader(File file);
    • FileReader(String path);
  4. 方法:
    • int read() 一次读取一个字符,返回的是读取字符对应的int值
    • int read(char[] cbuf) 一次读取一个字符数组,返回的是读取个数
    • int read(char[] cbuf,int off ,int len ) 一次读取一个字符数组一部分,返回的是读取个数
      • cbuf :读取的数组
      • off :那个开始读
      • len :读多少个
    • void close()
  5. 测试
    @Test
    public void demo1() throws IOException {
        FileReader fileReader = new FileReader("testfile.txt");

        int i;
        while (((i = fileReader.read()) != -1)) {
            System.out.println((char) i);
        }
        fileReader.close();
    }


	@Test
    public void demo2() throws IOException {
        FileReader fileReader = new FileReader("testfile.txt");

        int i;
        char[] chars = new char[2];
        while (((i = fileReader.read(chars)) != -1)) {
            System.out.println(new String(chars, 0, i));
        }
        fileReader.close();

    }

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


三、FileReader 字符输出流

  1. 概述:
    • 字符输入流: Writer 抽象类
      • 子类:FileWriter
  2. 作用:
    • 将数据写到文件中
  3. 构造:
    • FileWriter (File file);
    • FileWriter (String fileName);
    • FileWriter (String fileName,boolean append); 追加,续写
  4. 方法:
    • int write()
    • int write(char[] cbuf)
    • int write(char[] cbuf,int off ,int len )
    • int write(String str)
    • void close()
  5. 小细节
    • FileWriter 底层自带一个缓冲区,我们写的数据会先保存到缓冲区中,所以我们需要将缓冲区中的数据刷到文件中
    • flush():将缓冲区中的数据刷到文件中,后续流对象还能继续使用
    • close():先刷新后关闭,后续流对象不能使用了
  6. 测试
	@Test
    public void demo3() throws IOException {
        FileWriter fileWriter = new FileWriter("testfile.txt");
        fileWriter.write("干就完了,兄弟们!\n");
        fileWriter.write("奥利给\n");
        fileWriter.flush();
        fileWriter.close();
    }

在这里插入图片描述

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值