字符流/节点流(FileReader、FileWriter)

上一篇字符流(InputStreamReader、OutputStreamWriter) - 鹿先森JIAN - 博客园 (cnblogs.com)对纯文本文件txt的读写复制操作,可针对不同编码进行转换设置。如果是默认的读写的文本文件的编码要与当前环境的编码兼容,可采用以下更简便的方法去写:

FileReader字符流,输入流,节点流。用来以字符为单位读取文件内容

FileWrtier字符流,输出流,节点流。用来以字符为单位把数据保存到文件中

注意:
以 Reader 结尾的这些字符流只能读写纯文本文件txt
FileReader、FileWriter 读写的文本文件的编码要与当前环境的编码兼容

 

--------------------------------------------------

FileReader

  • FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader
  • FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader
复制代码
//使用FileReader读取文本文件的内容
public class Test01 {
    public static void main(String[] args) throws IOException {
        //1)建立流通道
        //out.txt文件是GBK编码,以FileReader读取,汉字会出现乱码
//        FileReader fr = new FileReader("D:\\yexiao1793\\file\\out.txt");
        //Test02.txt文件中既有中文又有英文, 该文件是以UTF-8编码的
        FileReader fr = new FileReader("D:\\yexiao1793\\file\\Test02.txt");

        //2)逐个字符读取. read()一次读取一个字符,返回字符的码值,如果读取文件末尾返回-1
        int cc = fr.read();
        while (cc != -1 ){
            System.out.print( (char)cc );
            cc = fr.read();
        }

        //3)关闭
        fr.close();
    }
}
复制代码

FileWriter

  • FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象
  • FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象
复制代码
// FileWriter 把字符保存到文件中
public class Test02 {
    public static void main(String[] args) throws IOException {
        //1)以覆盖的方式建立流通道,如果文件已存在,会覆盖文件原来的内容.如果文件不存在,会创建的新文件且编码格式就是UTF-8编码
        FileWriter fw = new FileWriter("D:\\yexiao1793\\file\\out3.txt");
        // out.txt文件已存在, 并且是GBK编码, 以覆盖的方式打开,会把文件编码更改为UTF-8
//        FileWriter fw = new FileWriter("D:\\yexiao1793\\file\\out.txt");
        // out.txt文件已存在, 并且是GBK编码, 以追加的方式打开,写入文件中的汉字会变为乱码
//        FileWriter fw = new FileWriter("D:\\yexiao1793\\file\\out.txt", true );

        fw.write('汉');
        fw.write('字');
        fw.write( 98 );
        fw.write( 30098 );
        fw.write('\r');
        fw.write('\n');
        fw.write("hello动力节点".toCharArray());
        fw.write("\r\n还可以直接写一个字符串");

        fw.close();
    }
}
复制代码

--------------------------------------------

复制代码
//文本文件的复制
public class Test03 {
    public static void main(String[] args) {
        String srcFile = "D:\\yexiao1793\\code\\day0901\\src\\filereaderwriter\\Test03.java"; // 源文件
        String destFile = "d:/yexiao1793/file/test03.java"; // 新位置

        copyTextFile(srcFile, destFile);
    }

    //文本文件复制,使用字符数组作为容器,自动关闭流
    private static void copyTextFile(String srcFile, String destFile) {
        try (
                FileReader reader = new FileReader(srcFile);
                FileWriter writer = new FileWriter(destFile);
        ) {
            char [] contents = new char[1024*4];
            int len = reader.read(contents); // 以字符数组方式读写
            while (len != -1 ){
                writer.write(contents, 0, len);
                len = reader.read(contents);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //文本文件复制,逐个字符复制,手动关闭流
    private static void copyTextFile1(String srcFile, String destFile) {
        FileReader reader = null;
        FileWriter writer = null;
        try {
            reader = new FileReader(srcFile);
            writer = new FileWriter(destFile);

            int cc = reader.read();
            while( cc != -1){
                writer.write(cc);
                cc = reader.read();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null ) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (writer!=null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
复制代码

 

posted @   鹿先森JIAN  阅读(460)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示