JavaIO流-FileReader、FileWriter字符流
import org.junit.Test; import java.io.*; /** * 一、流的分类 * 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)) * Reader FileReader (read(char [] cbuf)) BufferedReader (read(char [] cbuf)) * Writer FileWriter (write(char [] cbuf,0,len)) BufferedWriter (write(char [] cbuf,0,len)) * @author orz */ public class FileReadWriteTest { /** * 将hello.txt文件内容读入程序中,并输出到控制台a * FileReader基本操作 * 1.实例化File类的对象,指明要操作的文件 * 2.提供具体的流(FileReader) * 3.数据读入(read) * 4.流的关闭 * * * 说明点 * 1.public int read()理解:返回读入的一个字符。如果打到末尾,返回-1 * public int read(char cbuf[]) :返回每次读入cbuf数组中的字符个数。如果达到文件末尾,返回-1 * 2.异常处理:为了保证流资源一定可以执行关闭操作。需要使用try-catch-finally处理 * 3.读入文件一定要存在,否则会报FileNotFoundException */ @Test public void test1() { //相对于module //1.实例化File类的对象,指明要操作的文件 // FileReader fr=null; try { File file=new File("hello1.txt"); //2.提供具体的流 fr=new FileReader(file); //3.数据读入 //public int read()//返回读入的一个字符,如果达到文件末尾,返回-1 int data; while ((data=fr.read())!=-1) { System.out.print((char)data); } }catch (IOException e) { e.printStackTrace(); } finally { //4.流的关闭 if(fr!=null) { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } } } @Test public void test2() { //1.File类的实例化 //2.FIleReader流实例化 //3.读入的操作 //4.资源的关闭 FileReader fr=null; try { File file=new File("hello.txt"); fr=new FileReader(file); char [] cbuf=new char[5]; int len; while ((len=fr.read(cbuf))!=-1) { for (int i = 0; i <len ; i++) { System.out.print(cbuf[i]); } } } catch (IOException e) { e.printStackTrace(); } finally { if(fr!=null) { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 从内存中写出数据到硬盘文件里 * 1.实例化File类的对象,指明要操作的文件 * 2.提供FileWriter的对象,用于数据的写出 * 3.写出的操作(write) * 4.资源的关闭 * * *说明: * 1.输出操作,对应的File可以不存在。并不会报异常 * 2.File对应的硬盘如果文件存在: * 如果流使用的构造器是:FileWriter(file,false)/FileWriter(file):对原文件进行覆盖 * 如果流使用的构造器是:FileWriter(file,true):不会对原文件覆盖,而是在原文件基础上追加内容 */ @Test public void test3() { // 1.提供File类的对象,指明要写到的文件 File file=new File("hello.txt"); //2.提供FileWriter的对象,用于数据的写出 FileWriter fw=null; try { fw=new FileWriter(file,true); //3.写出的操作 fw.write("I have a dream\n"); fw.write("I am 19 years old\n"); } catch (IOException e) { e.printStackTrace(); } finally { if(fw!=null) { try { //4.资源的关闭 fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 综合使用输入输出流(相当于复制文件) * //1.创建File类的对象,指明读入和写出的文件 * //2.创建输入流、输出流对象 * //3.数据的读入和写出操作 * //4.流资源关闭 * * */ @Test public void test4() { //1.创建File类的对象,指明读入和写出的文件 FileReader fr=null; FileWriter fw=null; try { //2.创建输入流、输出流对象 File file1=new File("hello.txt"); File file2=new File("hi.txt"); fr=new FileReader(file1); fw=new FileWriter(file2); //3.数据的读入和写出操作 char [] cbuf=new char[5]; 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(); } try { if(fr!=null) { fr.close(); } } catch (IOException e) { e.printStackTrace(); } } } @Test public void test5() { } }