字符流学习

1、字符流

1.1、字符输入流
1.1.1字符输入流

​ Reader
​ 字符输入流顶层父类
​ FileReader
​ 字符输入流常用子类

1.1.2构造方法

​ FileReader(String pathName)
​ 通过指定的字符串路径创建字符输入流对象
​ FileReader(File file)
​ 通过指定的文件对象创建字符输入流对象

1.1.3成员方法

​ int read()
​ 一次读取一个字符,返回值是读取的字符对应的int数
​ int read(char[] chars)
​ 一次读取一个字符数组,返回值是读取到的字符的个数
​ void close()
​ 关流,释放资源

package com.itfenghua01;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileReadDemo {
    public static void main(String[] args) throws IOException {
        //FileReadeer是InputStreamReader的简写如果要使用指定编码则要使用InputStreamReader
        FileReader fr = new FileReader("day09\\test.txt");
        FileWriter fw = new FileWriter("day09\\java.txt");
        //按照字符数组读取数据
        char[]  cc =  new char[1024];
        int len;
        //遍历
        while ((len =fr.read(cc))!=-1){
            fw.write(cc,0,len);
        }
        //关闭资源
        //先开后关
        fw.close();
        fr.close();
    }
}
1.1.4字符数组转换为字符串

​ String类的构造方法String(char[] chars)
​ 转换整个字符数组
​ String类的构造方法String(char[] chars,int index,int count)
​ 转换字符数组的一部分,从index处开始,转换count个

1.2、字符输出流
1.2.1字符输出流

​ Writer
​ 字符输出流顶层父类
​ FileWriter
​ 字符输出流常用子类

1.2.2构造方法

​ FileWriter(String pathName)
​ 通过指定的字符串路径创建字符输出流对象,写入数据时,覆盖原数据
​ FileWriter(String pathName,boolean append)
​ 通过指定的字符串路径创建字符输出流对象,写入数据时,追加到原数据后边
​ FileWriter(File file)
​ 通过指定的文件对象创建字符输出流对象,写入数据时,覆盖原数据
​ FileWriter(File file,boolean append)
​ 通过指定的文件对象创建字符输出流对象,写入数据时,追加到原数据后边

1.2.3成员方法

​ void write(int i)
​ 一次写入一个字符
​ void write(char[] chars)
​ 一次写入一个字符数组
​ void write(char[] chars,int index,int count)
​ 一次写入一个字符数组的一部分,从index开始,写入count个
​ void write(String string)
​ 一次写入一个字符串
​ void write(String string,int index,int count)
​ 一次写入一个字符串的一部分,从index开始,写入count个
​ void flush()
​ 刷新缓冲区
​ void close()
​ 关流,释放资源

1.2.4flush()和close()的区别

​ flush():
​ 刷新缓冲区,之后可以继续写入
​ close()
​ 关流,关闭之前会进行刷新的操作,关闭后不能再写入

2、缓冲流

2.1字节缓冲输出流
2.1.1BufferedOutputStream

​ 父类是OutputStream,继承了父类的成员方法

2.1.2构造方法

​ BufferedOutputStream(OutputStream os)
​ 通过指定的字节输出流对象创建字节缓冲输出流对象,不指定缓冲区大小
​ 默认是1024*8
​ BufferedOutputStream(OutputStream os,int size)
​ 通过指定的字节输出流对象创建字节缓冲输出流对象,指定缓冲区大小

2.1.3使用步骤

​ 1.创建字节输出流FileOutoutStream对象
​ 2.创建字节缓冲输出流BufferedOutputStream对象,传入字节输出流对象
​ 3.通过字节缓冲输出流对象的write方法,将数据写入到缓冲区
​ 4.通过字节缓冲输出流对象的flush方法,将缓冲区的数据刷新到文件件中
​ 5.通过字节缓冲输出流对象的close方法,关流释放资源

2.2字节缓冲输入流
2.2.1BufferedInputStream

​ 父类是InputStream,继承了父类的成员方法

2.2.2构造方法

​ BufferedInputStream(InputStream is)
​ 通过指定的字节输入流对象创建字节缓冲输入流对象
​ BufferedInputStream(InputStream is,int size)
​ 通过指定的字节输入流对象创建字节缓冲输入流对象,指定缓冲区的大小

2.2.3使用步骤

​ 1.创建字节输入流FileInputStream对象
​ 2.创建字节缓冲输入流BufferedInputSream对象,传入字节输入流对象
​ 3.通过字节缓冲输入流对象的read方法读取数据
​ 4.通过字节缓冲流输入流对象的close方法关流释放资源

package com.itfenghua01;

import java.io.*;

public class BufferderReaderDemo {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new FileReader("day09\\StringDemo.java"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("day09\\SStringDemo"));
        char[] cc = new char[2048];
        int len ;
        while ((len=br.read(cc))!=-1){
            bw.write(cc,0,len);
            System.out.println(new String(cc,0,len));
        }
        bw.close();
        br.close();
    }
}
2.3文件复制效率对比

​ 1.缓冲流加数组
​ 2.字节流加数组
​ 3.缓冲流一次读写一个字节
​ 4.字节流一次读写一个字节

2.4字符缓冲输出流
2.4.1BufferedWriter

​ 父类是Writer,继承了父类的成员方法

2.4.2构造方法

​ BufferedWriter(Writer writer)
​ 通过指定的字符输出流对象创建字符缓冲输出流对象
​ BufferedWriter(Writer writer,int size)
​ 通过指定的字符数出流对象创建字符缓冲输出流对象,指定缓冲区大小

2.4.3特有方法

​ newLine()
​ 换行

2.4.4使用步骤

​ 1.创建字符输出流FileWriter对象
​ 2.创建字符缓冲输出流BufferedWriter对象,传入字符输出流对象
​ 3.通过字符缓冲输出流对象的write/newLine方法,将数据写入到缓冲区中
​ 4.通过字符缓冲输出流对象的flush方法,将缓冲区中的数据刷新到本地文件中
​ 5.通过字符缓冲输出流对象的close方法,关流释放资源

2.5字符缓冲输入流
2.5.1BufferedReader

​ 父类是Reader,继承父类的成员方法

2.5.2构造方法

​ BufferedReader(Reader reader)
​ 通过指定的字符输入流对象创建字符缓冲输入流对象
​ BufferedReader(Reader reader,int size)
​ 通过指定的字符输入流对象创建字符缓冲输入流对象,指定缓冲区大小

2.5.3特有方法

​ String readLine()
​ 一次读取一行
​ 一次循环中,不能readLine多次

2.5.4使用步骤

​ 1.创建字符输入流FileReader对象
​ 2.创建字符缓冲输入流BufferedReader对象,传入字符输入流对象
​ 3.通过字符缓冲输入流对象的read/readLine读取数据
​ 4.通过字符缓冲输入流对象的close方法关流释放资源

3、转换流

3.1编码表
3.1.1概念

​ 生活中的文字和计算机中二进制的对应规则
​ ASCII
​ 美国用的码表
​ ISO-8859-1
​ 欧洲用的码表
​ GBK
​ 支持中文的码表
​ 一个中文占两个字节
​ Unicode
​ 万国码
​ 一个中文占三个字节

3.2字符转字节

​ OutputStreamWriter
​ 父类是Writer,继承了父类的成员方法,是字符流向字节的桥梁

3.2.1构造方法

​ OutputStreamWriter(OutputStream os)
​ 通过指定的字节流对象创建转换流对象,不指定编码,默认是utf-8
​ OutputStreamWriter(OutputStream os,String charset)
​ 通过指定的字节流对象创建转换流对象,指定编码,编码是charset

3.2.2使用步骤

​ 1.创建字节输出流FileOutputStream对象
​ 2.创建转换流OutputStreamWriter对象,传入字节流对象
​ 3.通过转换流对象的write方法,将数据写入到缓冲区
​ 4.通过转换流对象的flush方法,将数据刷新到文件
​ 5.通过转换流对象的close方法,关流释放资源

3.3字节转字符
3.3.1InputStreamReader

​ 父类是Reader,继承了父类的成员方法,是字节流向字符的桥梁

3.3.2构造方法

​ InputStreamReader(InputStream is)
​ 通过指定的字节输入流对象创建转换流对象,不指定编码,默认是utf-8
​ InputStreamReader(InputStream is,String charset)
​ 通过指定的字节输入流对象创建转换流对象,指定编码,编码是charset

3.3.3使用步骤

​ 1.创建字节输入流FileInputStream对象
​ 2.创建转换流InputStreamReader对象,传入字节流对象
​ 3.通过转换流对象read方法读取数据
​ 4.通过转换流对象的close方法关流释放资源

3.3.4注意

​ 创建转换流对象,指定编码时,要与文件的编码一致,防止出现乱码

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值