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));