IO流——字符流

本文详细介绍了Java中的FileReader用于从文件读取字符数据,以及FileWriter用于将字符数据写入文件的使用方法。包括构造函数、核心方法和示例演示,以及两者在实际场景中的应用区别。
摘要由CSDN通过智能技术生成

FileReader(文件字符输入流)

  • 作用:以内存为基准,可以把文件中的数据以字符的形式读入到内存中去
构造器说明
public FileReader(File file)创建字符输入流管道与源文件接通
public FileReader(String pathName)创建字符输入流管道与源文件接通
方法名说明
public int read()每次读取一个字符返回,如果发现没有数据可读会返回-1
public int read(char[] buffer)每次用一个字符数组去读数据,返回字符数组读取了多少个字符,如果发现没有数据可读会返回-1

演示1

public class FileReaderTest1 {

    public static void main(String[] args) {
        // 每次读取单个字符
        // try-with-resources:可自动关闭流,或者说可以自动关闭继承自AutoCloseable的类
        try (
                Reader reader = new FileReader("oop3\\src\\com\\ligemanyin\\_IO\\_FileReader\\经乱离后天恩流夜郎忆旧游书怀赠江夏韦太守良宰.txt");
                ) {
                    // 记录每次读取的字符编号
                    int c;
                    while ((c = reader.read()) != -1) {
                        System.out.print((char) c);
                    }
                } catch(Exception e) {
                    e.printStackTrace();
        }
    }
}

演示2

public class FileReaderTest2 {
    public static void main(String[] args) {
    	// 每次读取多个字符
        try (
                Reader reader = new FileReader("oop3\\src\\com\\ligemanyin\\_IO\\_FileReader\\经乱离后天恩流夜郎忆旧游书怀赠江夏韦太守良宰.txt");
                ) {
            // 天上白玉京,十二楼五城。加上换行符一共13个字符
            char[] buffer = new char[13];
            // 记录每次读取了多少个字符
            int len;
            while ((len = reader.read(buffer)) != -1) {
                System.out.print(new String(buffer, 0, len));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

FileWriter(文件字符输出流)

  • 作用:以内存为基准,把内存中的数据以字符的形式写出到文件中去
构造方法说明
public FileWriter​(File file)创建字节输出流管道与源文件对象接通
public FileWriter(String filePath)创建字节输出流管道与源文件路径接通
public FileWriter(File file boolean append)创建字节输出流管道与源文件对象接通,可追加数据
public FileWriter(String filePath boolean append)创建字节输出流管道与源文件对象接通,可追加数据
方法名说明
void write(int c)写一个字符
void write(String str)写一个字符串
void write(String str, int off, int len)写一个字符串的一部分
void write(char[] cbuf)写入一个字符数组
void write(char[] cbuf, int off, int len)写入字符数组的一部分

注: 字符输出流写出数据后,必须刷新或关闭流,写出去的数据才能生效

方法名说明
public void flush() throws IOException刷新流,就是将内存中缓存的数据立即写到文件中去,即立即使写出去的数据生效
public void close() throws IOException关闭流,包含了刷新操作

演示

public class FileWriterTest1 {
    public static void main(String[] args) {
        // 创建一个文件字符输出流管道与目标文件接通
        try (
                // 追加数据,在构造器中fileName后添加true即可,在此不做演示
                Writer writer = new FileWriter("oop3\\src\\com\\ligemanyin\\_IO\\_FileWriter\\writeTest1.txt")
        ) {
            // 写一个字符
            writer.write('x');
            // 换行
            writer.write(10);

            // 写一个字符串
            writer.write("流光容易把人抛,红了樱桃,绿了芭蕉\n");

            // 写一个字符串的一部分
            String str = "何处是归程?长亭更短亭";
            // 何处是规程?
            writer.write(str, 0, 6);
            writer.write(10);

            // 写一个字符数组
            char[] chars = ("东武望余杭,\n云海天涯两渺茫。\n何日功成名遂了,\n还乡,\n" +
                    "醉笑陪公三万场,\n不用诉离殇,\n痛饮从来别有肠。\n今夜送归灯火冷,\n" +
                    "河塘,\n堕泪羊公却姓杨。").toCharArray();
            writer.write(chars);

            // 写字符数组的一部分
            writer.write("\n\n");
            writer.write(chars, 0, 53);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

字节流、字符流的使用场景小结:

  • 字节流适合做一切文件数据的拷贝(音视频、文本、图片等),而字节流不适合读取中文内容输出
  • 字符流适合做文本文件的操作(读、写)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

离歌慢饮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值