字节流可以处理MP3,图片,视频,等用二进制存储的数据类型,虽然可以操作强行字符,但会出现各种难以控制的问题
但是不能直接操作Unicode字符,因为一个字符有两个字节,字节流一次只能操作一个字节。
字符流处理的单元为2个字节的Unicode字符,字符流用来操作字符、字符数组或字符串
字符流的介绍
输入字符流Reader继承图:
抽象类Reader的常用方法:
abstract void close() 关闭字符流释放系统资源
.
int read() 读一个字符,游标后移,返回对应的字符对应的unicode编码,读不到内容返回-1
int read(char[] cbuf) 将内容放入char数组,存放的是字符对应的unicode编码,返回存放字符的个数,读不到内容返回-1
abstract int read(char[] cbuf, int off, int len)读取指定长度的存放到char数组,存放字符对应的unicode编码,读不到内容返回-1
以Reader的子类FileReader来演示:
package IoCharctorTest01;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class IoCharTest01 {
public static void main(String[] args){
try (
FileReader r=new FileReader("test\\test0.txt");
){
/*
int temp;
while ((temp=r.read())!=-1){
System.out.println( (char)temp);
}
*/
char [] chars=new char[3];
int temp;
while ((temp=r.read(chars))!=-1){
System.out.println(new String(chars,0,temp) );
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出字符流Writer
Writer的继承关系图
Writer抽象类的常用方法:
abstract void close(),刷新字符输出流,再关闭它
abstract void flush() 刷新流,保证写入成功
void write(char[] cbuf) 写一个char类型的数组
abstract void write(char[] cbuf, int off, int len)写char数组,根据指定索引和长度
void write(int c)写一个字符,这个字符是int型的unicode编码
void write(String str)写一个字符串
void write(String str, int off, int len)写字符串,根据指定索引和长度
以FileWriter类示例
FileWriter的常用构造方法:
FileWriter(File file)根据给定文件构造FileWriter对象
FileWriter(File file, boolean append)根据给定文件构造FileWriter对象,第2个参数选择是否覆盖原有文件内容
FileWriter(String fileName)根据给定字符串路径构造FileWriter对象
FileWriter(String fileName, boolean append)根据给定字符串路径构造FileWriter对象,第2个参数选择是否覆盖原有文件内容
注意:如果路径不存在,则会在该路径下创建文件
package IoCharctorTest01;
import java.io.FileWriter;
import java.io.IOException;
public class IoTest02 {
public static void main(String[] args){
try (
FileWriter fw=new FileWriter("test\\test4.txt");
){
fw.write("你好,中国,我们要加油!");
fw.write(95);
} catch (IOException e) {
e.printStackTrace();
}
}
}
out:
test4.txt中的内容如下:
你好,中国,我们要加油!_
应用字符流可以解决字符的乱码问题
用字符流拷贝文本文件可以避免文件中的内容乱码,需要注意的是字符流不能拷贝非文本文件,比如word文档,照片,视频等文件,会出现错误.
示例:
import java.io.*;
public class fileCopy01 {
public static void main(String[] args){
try (
FileReader fr=new FileReader("word.txt") ;
FileWriter fw=new FileWriter("word1.txt");
){
//通过char数组,复制文件
char[] chars=new char[5];
int temp;
while ((temp=fr.read(chars))!=-1){
fw.write(chars,0,temp);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
out:
源文件内容:
好吗
天天
目标文件内容:
好吗
天天