Java IO详解(四)------字符流 FileReader、FileWriter

1.字符输出流:Writer

FileWriter 是Writer的子类,以FileWriter 为例把字符串写入到文件

package stream;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

/***
 * @ClassName: FileWriter
 * @Description: TODO
 * @Auther: chujiu
 * @Date: 2020/6/9
 * @version : V1.0
 */
public class FileWriterDemo {
    public static void main(String[] args) throws IOException {

        //1、创建源
        File srcFile = new File("G:" + File.separator + "javabased" + File.separator + "JavaTest" + File.separator + "java.txt");

        //2、创建字符输出流对象
        Writer out = new FileWriter(srcFile);

        //3、具体的 IO 操作
        /***
         * void write(int c):向外写出一个字符
         * void write(char[] buffer):向外写出多个字符 buffer
         * void write(char[] buffer,int off,int len):把 buffer 数组中从索引 off 开始到 len个长度的数据写出去
         * void write(String str):向外写出一个字符串
         */
        //void write(int c):向外写出一个字符
        out.write(65);//将 A 写入 java.txt 文件中

        //void write(char[] buffer):向外写出多个字符 buffer
        out.write("Aa帅锅".toCharArray());//将 Aa帅锅 写入 java.txt 文件中

        //void write(char[] buffer,int off,int len)
        out.write("Aa帅锅".toCharArray(), 0, 2);//将 Aa 写入java.txt文件中

        //void write(String str):向外写出一个字符串
        out.write("Aa帅锅");//将 Aa帅锅 写入 java.txt 文件中

        //4、关闭流资源
        /***
         * 注意如果这里有一个 缓冲的概念,如果写入文件的数据没有达到缓冲的数组长度,那么数据是不会写入到文件中的
         * 解决办法:手动刷新缓冲区 flush()
         * 或者直接调用 close() 方法,这个方法会默认刷新缓冲区
         */
        out.flush();
        out.close();
    }
}

2.字符输入流:Reader

FileReader 是Reader子类,以FileReader 为例进行文件读取

package stream;

import java.io.*;

/***
 * @ClassName: FileReaderDemo
 * @Description: TODO
 * @Auther: chujiu
 * @Date: 2020/6/9
 * @version : V1.0
 */
public class FileReaderDemo {
    public static void main(String[] args) throws IOException {

        //1、创建源
        File srcFile = new File("G:" + File.separator + "javabased" + File.separator + "JavaTest" + File.separator + "java.txt");

        //2、创建字符输出流对象
        Reader in = new FileReader(srcFile);

        //3、具体的 IO 操作
        /***
         * int read():每次读取一个字符,读到最后返回 -1
         * int read(char[] buffer):将字符读进字符数组,返回结果为读取的字符数
         * int read(char[] buffer,int off,int len):将读取的字符存储进字符数组 buffer,返回结果为读取的字符数,从索引 off 开始,长度为 len
         *
         */
        //int read():每次读取一个字符,读到最后返回 -1
        int len = -1;//定义当前读取字符的数量
        while ((len = in.read()) != -1) {
            //打印 a.txt 文件中所有内容
            System.out.print((char) len);
        }

        //int read(char[] buffer):将字符读进字符数组
        char[] buffer = new char[10]; //每次读取 10 个字符
        while ((len = in.read(buffer)) != -1) {
            System.out.println(new String(buffer, 0, len));
        }

        //int read(char[] buffer,int off,int len)
        while ((len = in.read(buffer, 0, 10)) != -1) {
            System.out.println(new String(buffer, 0, len));
        }

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

3.用字符流完成文件的复制

package stream;

import java.io.*;

/***
 * @ClassName: FileCopying
 * @Description: TODO
 * @Auther: chujiu
 * @Date: 2020/6/9
 * @version : V1.0
 */
public class FileCopying {
    public static void main(String[] args) throws IOException {

        /**
         * 将 a.txt 文件 复制到 b.txt 中
         */
        //1、创建源和目标
        File srcFile = new File("G:" + File.separator + "javabased" + File.separator + "JavaTest" + File.separator + "a.txt");
        File descFile = new File("G:" + File.separator + "javabased" + File.separator + "JavaTest" + File.separator + "b.txt");

        //2、创建字符输入输出流对象
        Reader in = new FileReader(srcFile);
        Writer out = new FileWriter(descFile);

        //3、读取和写入操作
        char[] buffer = new char[10];//创建一个容量为 10 的字符数组,存储已经读取的数据
        int len = -1;//表示已经读取了多少个字节,如果是 -1,表示已经读取到文件的末尾
        while((len=in.read(buffer))!=-1){
            out.write(buffer, 0, len);
        }

        //4、关闭流资源
        out.close();
        in.close();
    }
}
一辈子很短,努力的做好两件事就好;第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。
原文地址:https://www.cnblogs.com/antao/p/13070110.html