(一)功能区别
1、FileInputSteam和FileOutputStream可以完成所有格式文件的复制;
2、FileReader和FileWriter只能完成文本格式的复制,无法完成视频、音频等文件的复制;
(二)区别原理
1、字节不需要解码编码,将字节转化为字符才需要进行解码编码的问题;
2、字节流可以从所有设备中读写数据,但字符流只能从文本格式的设备中读写数据;
注:当程序需要从显示器中显示时,带有中文等字符形式的文件使用字节流因为需要解码编码会出现乱码,无法正确输出;
案例一:
public class TestCopy {
public static void main(String[] args) {
FileReader fi=null;
FileWriter fo=null;
try {
fi=new FileReader("D:\\朴树 - 平凡之路.flac");//用字符流复制一个音频文件
fo=new FileWriter("C:\\Users\\86152\\Desktop\\新建文件夹\\yy.flac");
int i;
while(-1!=(i=fi.read())) {
fo.write(i);
}
}
catch(FileNotFoundException e) {
System.out.printf("文件没有找到!\n");
System.exit(-1);
}
catch(IOException e) {
System.out.printf("文件读写错误!\n");
System.exit(-1);
}
finally {
try {
if(fi!=null) {
fi.close();
fi=null;
}
if(fo!=null) {
fo.close();
fo=null;
}
}
catch(Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
System.out.printf("复制成功!\n");
}
}
复制成功后:
案例二:
import java.io.*;
public class TestFile {
public static void main(String[] args)throws Exception {
FileInputStream bis=new FileInputStream("D:\\JAVA\\lianxi\\src\\lianxi\\TestFile.java");
int i;
while(-1!=(i=bis.read())) {
System.out.printf("试一下%c", i);
}
}
}
输出结果: