字符流
字符输入流:Reader 字符输出流:Writer
Writer(abstract)--->OutputStreamWriter--->FileWriter
OutputStreamWriter (将字节转换为字符流的一个类)
字符输出流需要进行flush
字符流编码
常用的字符集:UTF-8 GBK GB2312 ISO-8859-1
当我们使用写的方法将字符写出到文件时,会使用默认的或者指定的字符集对字符进行编码,当我们打开文件的时候,其实就是文本编辑器对文件中的字符进行解码。在正确使用的时候,必须保证编码和解码 所用的字符集是一致的,否则就会出现中文乱码
字节流和字符流的区别
1、操作的单位不同:
字节流就是按照字节进行读写的;
字符流是按照字符进行读写的;
2、操作对象:
字节流可以读写任意文件
字符流只能读取纯文本文件
3、使用不同:
字节流是文件的最小单元,对文件的操作是原子级的
字符是两个字节的组合,需要在组合的时候,按照字符集进行正确的编码和解码
package org.lanqiao.writer.demo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
public class WriterDemo {
public static void main(String[] args) throws IOException {
//创建字符输出流
Writer w = new OutputStreamWriter(new FileOutputStream(new File("char.txt")),"UTF-8");
String str = "太原师范学院";
char[] charArr = {'太','原','师','范'};
w.write(charArr);
w.flush();
}
}
package org.lanqiao.reader.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
public class ReaderDemo {
public static void main(String[] args) throws IOException {
Reader r = new InputStreamReader(new FileInputStream(new File("abc.mp4")));
Writer w = new OutputStreamWriter(new FileOutputStream(new File("abcde.mp4")));
/*每次读取一个字符
* int i = 0 ;
while((i = r.read())!= -1) {
w.write(i);
w.flush();
}*/
// 每次读取字符数组长度个字符
char[] buf = new char[1024];
int len = 0 ;
while((len = r.read(buf))!= -1) {
w.write(buf, 0, len);
w.flush();
}
}
}