javaSE.I/O-字符流
流的概念和分类
字节流
字符流
字符编码
- ISO-8859-1 收录除ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号,1个字节;
- UFT-8 针对Unicode码表的可变长度字符编码,万国码,1、2、3个字节;
- GB2312 简体中文,1、2个字节;
- GBK 简体中文,扩充,1、2个字节;
- BIG5 繁体中文,台湾;
【注意】当编码方式和解码方式不一致时,会出现乱码
字符流的父类
Reader/Writer
文件字符流
FileReader
int read(char[] c) //从流中读取多个字符,将读到的内容存入C数组,返回之际读到的字符数;如果到达文件的尾部,则返回-1;
FileWriter
void write(String str) //一次写出多个字符,将str中所有字符,写出到输出流;
/**
* 演示文件字符流FileReader、FileWriter
*/
public class FileReaderWriter {
public static void main(String[] args) throws Exception{
//1.创建文件字符输入流
FileReader fr = new FileReader("d:\\hello.txt");
//2.1 读取单个字符
// int data=0;
// while((data=fr.read())!=-1){
// System.out.println((char)data);
// }
//2.2 读取多个字符
char[] buf = new char[1024];
int count=0;
while ((count=fr.read(buf))!=-1){
System.out.println("读取的字符:"+new String(buf,0,count));
}
//3.关闭流
fr.close();
//1.创建文件字符流
FileWriter fw = new FileWriter("d:\\write.txt");
//2.写出
for (int i = 0; i <3 ; i++) {
fw.write("Java是最好的编程语言\r\n");
fw.flush();
}
//3.关闭
fw.close();
System.out.println("写出完毕");
}
}
字符缓冲流
- 高效读写;
- 支持输入换行符;
- 可一次写一行、读一行;
BufferedReader/BufferedWriter
/**
* 演示缓冲字符流BufferedReader、BufferedWriter
*/
public class BufferedReaderWriter {
public static void main(String[] args) throws Exception{
//1.创建缓冲字符流
FileReader fr = new FileReader("d:\\write.txt");
BufferedReader br = new BufferedReader(fr);
//2.1 读取,字符数组
char[] buf = new char[1024];
int count=0;
int num=0;
while ((count=br.read(buf))!=-1){
System.out.println(new String(buf,0,count));
num++;
System.out.println(num++);
}
//2.2 读取,读一行
String line=null;
num=0;
while((line=br.readLine())!=null){
System.out.println("第"+(++num)+"行:"+line);
}
//3.关闭流
br.close();
//1.创建流
FileWriter fw = new FileWriter("d:\\buffer.txt");
BufferedWriter bw = new BufferedWriter(fw);
//2.写出
for (int i = 0; i <3; i++) {
bw.write("好好学习,天天向上");
bw.newLine();//写入一个换行符,由操作系统决定
bw.flush();
}
//关闭流
bw.close();
System.out.println("写出完毕");
}
}