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

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

大家好,欢迎来到IT知识分享网。

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

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

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

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

字符流/节点流(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();
    }
}
字符流/节点流(FileReader、FileWriter)

——————————————–

//文本文件的复制
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();
                }
            }
        }
    }
}

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/27717.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信