package com.io;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import org.junit.Test;
/**
*
* fileReader和Writer每次读写两个字节,即一个字符,
* Reader和writer只适用于文本文档,而对于音视频文件不适用,因为音视频文件最基本的单位是字节,
* 用字符流是要出错的
*/
/**
*
* @author Administrator
*1、流的分类
*(1)按照数据流向的不同,分为输入流和输出流
*(2)按照处理数据单位的不同,分为字节流和字符流
*(3)按照角色的不同,分为节点流(直接作用于文件,所有带File的InputStream OutputStream)、处理流(作用于节点流上面,提高效率)
*2、IO体系
*抽象基类 节点流(即文件流) 缓冲流(处理流的一种)
*InputStream FileInputStream BufferedInputStream
*OutputStream FileOutputStream BufferedOutputStream
*Reader FileReader BufferedReader
*Writer FileWriter BufferedWriter
*3、所有的处理流都作用于上面四种节点流,才能进行对文件操作
*word文件,里面有可能有图片,只能用字节流
*4、缓冲流快的原因:不事缓冲流,就读取一个字节就写,比较慢,而缓冲流就是读取好多字节才写一次,就像read和read(btye)方法
*/
public class FileReaderWriterTest {
/*
* 文本文件的复制
*/
@Test
public void copyFilebyReaderWriter(){
FileReader fr = null;
FileWriter fw = null;
try {
File fileRead = new File("hello.txt");
File fileWrite = new File("hello_write.txt");
fr = new FileReader(fileRead);
fw = new FileWriter(fileWrite);
char[] c = new char[10];
int len;
while((len = fr.read(c)) != -1){
String str = new String(c, 0, len);
System.out.println(str);
System.out.println(len);
fw.write(c, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 节点流读取文本文件
*/
@Test
public void fileReaderTest1(){
FileReader fr = null;
try {
File file = new File("hello.txt");
fr = new FileReader(file);
char[] c = new char[4];//每次读4个字符
int len;
while((len = fr.read(c)) != -1){
System.out.print(len);
String str = new String(c, 0, len);//每次读4个字符
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}