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(); } } } }