IO流3、IO流_节点流_字符流的使用

文件流——字符流的使用

一、读取

read():

//将hello.txt文件内容读入程序中,并输出到控制台
@Test
public void testFileReader() {
    FileReader fileReader = null;
    try {
        //1、实例化File类的对象,指明要操作的文件
        File file = new File("hello.txt");
        //2、提供具体的流
        fileReader = new FileReader(file);
        //3、数据的读入
        //read():返回读入的一个字符,如果达到文件末尾,返回-1
        int data = fileReader.read();
        while (data != -1){
            System.out.print((char) data);
            data = fileReader.read();
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        //4、流的关闭操作
        try {
            if (fileReader != null)
            fileReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

说明点:

  1. read()的理解:返回读入的一个字符。如果达到文件末尾,返回-1
  2. 异常的处理:为了保证流资源一定可以执行关闭操作。需要使用try-catch-finally处理
  3. 读入的文件一定要存在,否则会报FileNotFoundException

read(char[] cbuf):

//对read()操作升级:使用read的重载方法
    @Test
    public void testFileReader1() {
        FileReader fileReader = null;
        try {
            //1、File类的实例化
            File file = new File("hello.txt");
            //2、FileReader流的实例化
            fileReader = new FileReader(file);
            //3、读入的操作
            //read(char[] cbuf):返回每次读入cbuf数组中的字符的个数。如果达到文件末尾,返回-1
            char[] cbuf = new char[5];
            int len;
            while ((len = fileReader.read(cbuf)) != -1) {
                //方式一:
                for (int i = 0; i < len; i++) {
                    System.out.print(cbuf[i]);
                }
                //方式二:
//                String str = new String(cbuf, 0, len);
//                System.out.print(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4、资源的关闭
            try {
                if (fileReader != null){
                    fileReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

二、写出

//从内存中写出数据到硬盘的文件里
@Test
public void testFileWriter() throws IOException {
    //1、提供File类的对象,指明写出到的文件
    File file = new File("hello1.txt");
    //2、提供FileWriter的对象,用于数据的写出
    FileWriter fileWriter = new FileWriter(file);
    //3、写出的操作
    fileWriter.write("I hava a dream\n");
    fileWriter.write("You too!");

    //4、流资源的关闭
    fileWriter.close();
}

说明点:

  1. 输出操作,对应的File可以不存在的,并不会报异常
  2. File中的文件如果不存在,在输出的过程中,会自动创建此文件
  3. File中的文件如果存在:
    1. 若流构造器使用的是 FileWriter(file, false) / FileWriter(file):对原有文件的覆盖
    2. 若流构造器使用的是 FileWriter(file, true):不会对原有文件覆盖,而是在原有文件基础上追加内容

三、用FileReader和FileWriter实现文本文件的复制

//文本文件的复制
@Test
public void testFileReaderFileWriter() {
    FileReader fileReader = null;
    FileWriter fileWriter = null;
    try {
        //1、创建File类的对象,指明读入和写出的文件
        File srcFile = new File("hello.txt");
        File destFile = new File("hello2.txt");
        //2、创建输入流和输出流的对象
        fileReader = new FileReader(srcFile);
        fileWriter = new FileWriter(destFile);
        //3、数据的读入和写出操作
        char[] cbuf = new char[5];
        int len;    //记录每次读入到cbuf数组中字符的个数
        while ((len = fileReader.read(cbuf)) != -1){
            //每次写出len个字符
            fileWriter.write(cbuf, 0, len);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        //4、关闭资源流
        try {
            if (fileReader != null)
                fileReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            if (fileWriter != null)
                fileWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

不能使用字符流来处理图片文件

posted @ 2021-11-19 23:56  叁玖贰拾柒  阅读(42)  评论(0)    收藏  举报