Java - io框架[字符流](三)

字符流的父类

Reader

在这里插入图片描述

Writer

在这里插入图片描述

文件字符流

FileReader

package zijieliu;
import java.io.FileReader;
/**
 * 使用FileReader
 */
public class demo4 {
    public static void main(String[] args) throws Exception{
//        创建FileReader文件输入流
        FileReader fileReader = new FileReader("d:\\hello.txt");
//        1. 读取单个字符
        int data = 0;
        while ((data=fileReader.read())!=-1){  //读取一个字符
            System.out.println((char) data);
        }
//        2. 读取多行字符
        char[] buf = new char[1024];
        int count = 0;
        while((count = fileReader.read(buf))!=-1){
            System.out.println(new String(buf,0,count));
        }
        fileReader.close();
    }
}

FileWriter

package zijieliu;
import java.io.FileWriter;
public class demo5 {
    public static void main(String[] args) throws Exception{
        FileWriter writer = new FileWriter("d:\\write.txt");
        for (int i = 0;i<10;i++){
            writer.write("java是最好的语言!\r\n");
            writer.flush();
        }
        writer.close();
        System.out.println("执行完成");
    }
}

文件复制案例

package zijieliu;
import java.io.FileReader;
import java.io.FileWriter;
/**
 * 只能复制文本文件,不能复制二进制文件,图片音频等
 */
public class copy {
    public static void main(String[] args) throws Exception{
        FileWriter writer = new FileWriter("d:\\write2.txt");
        FileReader reader = new FileReader("d:\\write.txt");
//        读写
        int data = 0;
        while ((data = reader.read())!=-1){
            writer.write(data);
            writer.flush();
        }
        writer.close();
        reader.close();
        System.out.println("执行完成!");
    }
}

为什么不能复制图片及二进制文件?

读取
硬盘里的二进制代码
将二进制代码转化为字符
内存

二进制代码没有对应的字符,没有办法解析,导致乱码

  • 字符流只能复制有字符编码的文件
  • 字节流可以复制任何文件

字符缓冲流

BufferedReader

package zijieliu;
import java.io.BufferedReader;
import java.io.FileReader;
public class demo6 {
    public static void main(String[] args) throws Exception{
//        创建缓冲流
        FileReader reader = new FileReader("d:\\write.txt");
        BufferedReader bufferedReader = new BufferedReader(reader);
//        1. 第一种方式
//        char[]buf = new char[1024];
//        int count = 0;
//        while((count = bufferedReader.read(buf))!= -1){
//            System.out.println(new String(buf,0,count));
//        }
//        第二种方式(读一行)

        String line = null;
        while ((line = bufferedReader.readLine())!= null){
            System.out.println(line);
        }
        bufferedReader.close();
    }
}

BufferedWriter

package zijieliu;
import java.io.BufferedWriter;
import java.io.FileWriter;

public class demo7 {
    public static void main(String[] args)throws Exception {
        FileWriter writer = new FileWriter("d:\\aaaa.txt");
        BufferedWriter bufferedWriter = new BufferedWriter(writer);
        for (int i = 0;i<10;i++){
            bufferedWriter.write("我要上天,别拦我!\r\n");
            bufferedWriter.flush();
        }
        bufferedWriter.close();
        System.out.println("执行完毕!");
    }
}

bufferedWriter.newLine();也是换行符,类似于\r\n


上一节(序列化与反序列化) 下一节(转换流&&PrintWriter)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

啊~小 l i

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

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

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

打赏作者

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

抵扣说明:

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

余额充值