01_字符流
- 字符输入流:父类Reader抽象类、(子类)BufferdReader、InputStreamReader、SreingReader
- 字符输出流:父类Writer抽象类、(子类)BufferdWriter、InputStreamWriter、SreingWriter
- 字符流只能对文本进行读写
- 字符流=字节流+编码表
编码:把字符串转换为字节数组。
解码:把字节数组转换成字符串。
乱码:没有用同一张码表。
getBytes(); 采用平台默认的码表进行编码。
getBytes(“GBK”); 自己指定编码表
01.1_转换流OutputStreamWriter的使用
OutputStreamWriter(OutputStream out)
package OutWriterDemo01;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class OutWriterTest01 {
public static void main(String[] args) throws IOException {
//创建使用默认字符编码的 OutputStreamWriter。
//输出流所关联的文件,如果不存在,会自动创建
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("a.txt",true));
//一次写一个字符
writer.write('a');
writer.write('a');
writer.flush();
//写一个字符数组
writer.write(new char[]{'再','也','没','有'});
writer.write("\r\n");
//写一个字符串
writer.write("一杯敬朝阳,一杯敬死亡");
/* OutputStreamWriter(OutputStream out, String charsetName)
创建使用指定字符集的 OutputStreamWriter。*/
OutputStreamWriter writer1 = new OutputStreamWriter(new FileOutputStream("b.txt"), "UTF-8");
writer1.write("人潮人海中");
writer1.flush();
writer1.close();
writer.close(); //刷新并关闭。
}
}
01.2_字符流的5种写数据的方式
public void write(int c) 写一个字符
writer.write('a');
public void write(char[] cbuf) 写一个字符数组
writer.write(new char[]{'再','也','没','有'});
public void write(char[] cbuf,int off,int len) 写一个字符数组的 一部分
writer.write(new char[]{'再','也','没','有'},0,2);
public void write(String str) 写一个字符串
writer1.write("人潮人海中");
public void write(String str,int off,int len) 写一个字符串的一部分
writer1.write("人潮人海中",0,3);
01.2_InputStreamReader的使用
package InputReadDemo01;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class InputReadTest01 {
public static void main(String[] args) throws IOException {
InputStreamReader reader = new InputStreamReader(new FileInputStream("c.txt"));
char[] chars = new char[1000];
//一次读取一个字符数组,返回值,返回的是读取到的有效的字符个数
// int len = reader.read(chars);
int len = reader.read(chars,0,3);
System.out.println(len);
for (char aChar : chars) {
System.out.println(aChar);
}
reader.close();
}
}
01.3_FileWriter和FileReader复制文本文件
一次读取一个字符,写一个字符来复制文本文件
package CopyDemo02;
import java.io.*;
public class CopyTest01 {
public static void main(String[] args) throws IOException {
//一次读取一个字符,写一个字符来复制文本文件
InputStreamReader in = new InputStreamReader(new FileInputStream("MyTest.java"));
OutputStreamWriter out= new OutputStreamWriter(new FileOutputStream("C:\\Users\\ShenMouMou\\Desktop\\MyTest.java"));
int ch=0;
while ((ch=in.read())!=-1){
out.write(ch);
out.flush();
}
in.close();
out.close();
}
}
一次读写一个字符数组,来复制
package CopyDemo02;
import java.io.*;
public class CopyTest02 {
public static void main(String[] args) throws IOException {
//一次读写一个字符数组,来复制
//一次读取一个字符,写一个字符来复制文本文件
InputStreamReader in = new InputStreamReader(new FileInputStream("MyTest.java"));
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("C:\\Users\\ShenMouMou\\Desktop\\MyTest.java"));
char[] chars = new char[1000];
int len=0;
while ((len=in.read(chars))!=-1){
// System.out.println("循环次数");
out.write(chars,0,len);
out.flush();
}
in.close();
out.close();
}
}
BufferedWriter写出数据 高效的字符输出流
BufferedReader读取数据 高效的字符输入流
创建一个使用默认大小输出缓冲区的缓冲字符输出流。*/
BufferedWriter bout = new BufferedWriter(new FileWriter("d.txt"));
// BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("e.txt")));
BufferedReader bin= new BufferedReader(new FileReader("MyTest.java"));
char[] chars = new char[1000];
int len = 0;
while ((len = bin.read(chars)) != -1) {
// System.out.println("循环次数");
bout.write(chars, 0, len);
bout.flush();
}
bout.close();
bin.close();
01.3_高效字符流特有的方法
public void newLine():根据系统来决定换行符 具有系统兼容性的换行符
public String readLine():一次读取一行数据 是以换行符为标记的 读到换行符就换行 没读到数据返回null,包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
BufferedWriter out = new BufferedWriter(new FileWriter("ff.txt"));
// BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("e.txt")));
BufferedReader in = new BufferedReader(new FileReader("MyTest.java"));
//读取一行,写入一行,来复制文件
String line=null;
while ((line=in.readLine())!=null){
out.write(line);
out.newLine();
out.flush();
}
in.close();
out.close();
注意:new FileReader()、new FileWriter()与初始的 InputStreamReader、 OutputStreamWriter用法一样,相当于简写