19-Java-异常与IO

课程笔记Day19

  • 字符文件流
  • 转换流
  • 字符缓冲流

第一章 字符文件流

第01节 基础理论

为什么需要使用字符流呢?

因为字节流操作文本文件的时候,容易出现 中文乱码问题。这种情况下,我们需要使用字符流。

例如:
	将文本文件的数据,读取到控制台当中,展示结果(采用字节流)

编码表
在这里插入图片描述

介绍公式

char = byte + 编码表;
字符 = 字节(0和1) + 编码表;
//字符流的由来就是 字节流和编码表的组合。
第02节 FileWriter

字符文件输出流 FileWriter

构造方法

方法API方法说明
FileWriter(String)参数1:文件的路径
FileWriter(String,boolean)参数1:文件的路径 参数2:是否开启追加写,默认false
FileWriter(File)参数1:文件的对象
FileWriter(File,boolean)参数1:文件的对象 参数2:是否开启追加写,默认false

常用方法,来自于父类的方法

方法API方法说明
void write(int)参数1:写入的字符数据
void write(char[])参数1:写入的字符数组数据
void write(char[],int,int)参数1:写入的字符数组数据,参数2:开始索引,参数3:写几个数据
void write(String)参数1:写入的字符数组数据
void write(String,int,int)参数1:写入的字符数组数据,参数2:开始索引,参数3:写几个数据
void flush()刷新流对象,将内存当中的数据刷新到硬盘当中
void close()这里的 close()方法表示断开和操作系统之间的关联关系
第03节 FileReader

字符文件输入流 FileReader

构造方法

方法API方法说明
FileReader(String)参数1:文件的路径
FileReader(File)参数1:文件的对象

常用方法

方法API方法说明
int read()一次读取一个字符,返回字符对应的整数值
int read(int[])一次读取一个字符数组,返回读取到的字符数组有效长度
int read(char[],int,int)一次读取一个字符数组的一部分,返回读取到的字符数组有效长度
void close()释放资源,断开程序和操作系统之间的关联关系

第二章 转换流

第01节 OutputStreamWriter
//目标:学习OutputStreamWriter的快速入门
@SuppressWarnings("all")
public class Test01 {

    public static void main(String[] args) throws IOException {
        String path = "JavaSEDay19\\dir\\测试04.txt";
        //1.创建对象
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(path),"GBK");
        //2.读写数据
        osw.write("定浩和腚耗");
        osw.flush();
        //3.释放资源
        osw.close();
    }
}
第02节 InputStreamReader
//目标:学习 InputStreamReader 的快速入门
public class Test02 {

    public static void main(String[] args) throws IOException {
        String path = "JavaSEDay19\\dir\\测试03.txt";
        //1.创建对象
        InputStreamReader isr = new InputStreamReader(new FileInputStream(path),"GBK");
        //2.读写数据
        int ch;
        while((ch = isr.read())!=-1){
            System.out.print((char)ch);
        }
        //3.释放资源
        isr.close();
    }
}
第03节 编码转换

将一个 gbk 格式的文件,转换成 utf-8格式。

分析:
	原始文件 gbk 格式  ---【InputStreamReader】---> 读取到程序当中 --【OutputStreamWriter】--> 目标文件 utf-8格式
	
注意:
	之前是什么格式的文件,读取的时候,就需要采用什么编码。
	写出的过程,需要转换编码。
	读:gbk
	写:utf-8

代码

//练习:编码转换 GBK --> UTF-8
@SuppressWarnings("all")
public class Test03 {

    public static void main(String[] args) throws IOException {

        String spath = "C:\\Users\\chenhaochuan\\Desktop\\新建文件夹\\hello.txt";
        String dpath = "JavaSEDay19\\dir\\目标文件03.txt";
        //1.创建对象
        InputStreamReader isr = new InputStreamReader(new FileInputStream(spath),"GBK");
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(dpath),"UTF-8");

        //2.读写数据
        int ch;
        while ((ch = isr.read())!=-1){
            osw.write(ch);
            osw.flush();
        }
        //3.释放资源
        isr.close();
        osw.close();
    }
}

第三章 字符缓冲流

第01节 BufferedWriter

字符缓冲输出流 BufferedWriter

构造方法

方法API方法说明
BufferedWriter(Writer)参数1:字符输出流的对象
BufferedWriter(Writer,int)参数1:字符输出流的对象,参数2:缓冲区大小

常用方法

方法API方法说明
void write(String)参数:字符串
void newLine()写换行符,不区分操作系统
void flush()刷新IO流
void close()释放资源
第02节 BufferedReader

字符缓冲输入流 BufferedReader

构造方法

方法API方法说明
BufferedReader(Reader)参数1:字符输入流的对象
BufferedReader(Reader,int)参数1:字符输入流的对象 参数2:缓冲区的大小

常用方法

方法API方法说明
String readLine()一次性读取一行数据,不会读取换行符
void close()释放资源,断开和操作系统之间的关联
第03节 复制文件案例
//练习:采用字符缓冲流实现文件复制代码(重点)特殊方法
@SuppressWarnings("all")
public class Test03 {

    public static void main(String[] args) throws IOException {

        String spath = "JavaSEDay19\\dir\\测试05.txt";
        String dpath = "JavaSEDay19\\dir\\目标文件04.txt";

        //1.创建对象
        BufferedReader br = new BufferedReader(new FileReader(spath));
        BufferedWriter bw = new BufferedWriter(new FileWriter(dpath));

        //2.读写数据
        String line;
        while ((line = br.readLine()) != null) {
            bw.write(line);
            bw.newLine();   //换行
            bw.flush();     //刷新
        }

        //3.释放资源
        br.close();
        bw.close();
    }
}
第04节 同文反转案例
//题目:同文反转【正确的写法】
@SuppressWarnings("all")
public class Test05 {

    public static void main(String[] args) throws IOException {

        String path = "JavaSEDay19\\dir\\hello.txt";
        //1. 将文件的数据读取到集合当中
        BufferedReader br = new BufferedReader(new FileReader(path));
        ArrayList<String> array = new ArrayList<>();
        //读取数据
        String line;
        while((line = br.readLine())!=null){
            array.add(line);
        }
        br.close();
        //2. 将集合的数据写回到文件当中
        BufferedWriter bw = new BufferedWriter(new FileWriter(path));
        //循环遍历集合,准备写数据
        for (String s : array) {
            //反转操作
            StringBuilder sb = new StringBuilder(s);
            String str = sb.reverse().toString();
            //写回数据
            bw.write(str);
            bw.newLine(); //换行
            bw.flush(); //刷新
        }
        bw.close();
    }
}

//循环遍历集合,准备写数据
for (String s : array) {
//反转操作
StringBuilder sb = new StringBuilder(s);
String str = sb.reverse().toString();
//写回数据
bw.write(str);
bw.newLine(); //换行
bw.flush(); //刷新
}
bw.close();
}
}












  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值