package csdn.java3;
/**
*
* 一、流的分类:
* 1.操作数据单位:字节流、字符流
* 2.数据的流向:输入流、输出流
* 3.流的角色:节点流、处理流
*
* 二、流的体系结构
* 抽象基类 节点流(或文件流) 缓冲流(处理流的一种)
* InputStream FileInputStream (read(byte[] buffer)) BufferedInputStream (read(byte[] buffer))
* OutputStream FileOutputStream (write(byte[] buffer,0,len) BufferedOutputStream (write(byte[] buffer,0,len) / flush()
* Reader FileReader (read(char[] cbuf)) BufferedReader (read(char[] cbuf) / readLine())
* Writer FileWriter (write(char[] cbuf,0,len) BufferedWriter (write(char[] cbuf,0,len) / flush()
*
*
*/
import java.io.*;
import org.junit.Test;
public class FileReaderWriterTest {
/**
* 使用FileReader和FileWriter实现文本文件的复制
*/
@Test
public void testFileReaderFileWriter() {
FileReader fr = null;
FileWriter fw = null;
try {
//1.创建File类的对象,指明读入和写出的文件
File srcFile = new File("D:\\eclipse-workspace\\csdn\\src\\csdn\\java3\\hello.txt");
File destFile = new File("D:\\eclipse-workspace\\csdn\\src\\csdn\\java3\\hello2.txt");
//不能使用字符流来处理图片等字节数据
/*File srcFile = new File("D:\\eclipse-workspace\\csdn\\src\\csdn\\java3\\爱情与友情.jpg");
File destFile = new File("D:\\eclipse-workspace\\csdn\\src\\csdn\\java3\\爱情与友情1.jpg");*/
//2.创建输入流和输出流的对象
fr = new FileReader(srcFile);
fw = new FileWriter(destFile);
//3.数据的读入和写出操作
char[] cbuf = new char[5];
//记录每次读入到cbuf数组中的字符的个数
int len;
while((len = fr.read(cbuf)) != -1){
//每次写出len个字符
fw.write(cbuf,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//4.关闭流资源
//方式一:
try {
if(fw != null)
fw.close();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(fr != null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//方式二:并列写
try {
if(fw != null)
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if(fr != null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}