字符流
1、Writer
字符写入流的抽象类,子类须实现的方法只有write(),flush(),close()
对文件的操作使用:FileWriter类完成
2、Reader
字符输出流的抽象类,子类须实现的方法只有read(),close()
对文件的操作使用:FileReader类完成
3、字符操作流,会自带缓存默认大小为1024字节,在缓存满后或手动刷新缓存或关闭流时会把数据写入文件;
字符流的内部实现还是字节流。
字节流与字符流的区别:
在所有的流操作里,字节永远是最基础的。任何基于字节的操作都是正确的。无论是文本文件还是二进制文件。如果确认流里面
只有可打印的字符,包括英文的和各种国家的文件,也包括中文,那么可以考虑用字符流。由于编码不同,多字节的字符可能占
用多个字节。比如GBK的汉字就占用2个字节,而UTF-8的汉字就占用3个字节。所以,字符流是根据指定的编码,将1个或多个字
节转化为java里面的unicode的字符,然后及逆行操作。
4、如何选择使用字节流还是字符流:
一般操作非文本文件时,使用字节流;操作文本文件时,建议使用字符流。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class CharStreamDemo {
public static void main(String[] args) {
//out();
in();
}
/**
字符输出流
1、确定文件目标
2、创建一个文件字符输出流对象
3、输出到文件的内容
4、关闭输出流
*/
public static void out() {
//1、确定文件目标
File file1 = new File("E:\\Java_IO\\hudechao.txt");
try {
//2、创建一个文件字符输出流对象
Writer wr = new FileWriter(file1,true);
//3、输出到文件的内容
wr.write(",美女来我家");
//4、关闭输出流
wr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
字符输入流
1、确定文件目标
2、创建一个文件字符输入流对象
3、套路代码读取文件内容
4、关闭输入流
*/
public static void in() {
//1、确定文件目标
File file2 = new File("E:\\Java_IO\\hudechao.txt");
try {
//2、创建一个文件字符输入流对象
Reader rd = new FileReader(file2);
//3、套路代码读取文件内容
StringBuilder buf = new StringBuilder();
char [] chars = new char[1];
int len = -1;
while((len=rd.read(chars))!=-1) { //将文件内容读取到字符数组chars里保存,以字符为单位读取
buf.append(new String(chars,0,len));//String类的常用方法,new String(char[] chars,int offset,int length)可将字符数组转为字符串
}
//4、关闭输入流
rd.close();
System.out.println(buf);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}