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()
    {

    }


}

 

posted @ 2020-07-29 17:28  orz江小鱼  阅读(135)  评论(0编辑  收藏  举报