zoukankan      html  css  js  c++  java
  • 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();
        }
    }
    一辈子很短,努力的做好两件事就好;第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。
  • 相关阅读:
    转:测试驱动开发全攻略
    转:如何提高自己的归纳总结能力?
    转:从编译链接过程解析static函数的用法
    C++ 不能在类体外指定关键字static
    转:画图解释 SQL join 语句
    转:[置顶] 从头到尾彻底理解KMP(2014年8月22日版)
    转:The Knuth-Morris-Pratt Algorithm in my own words
    转:数组与指针的区别
    删除单链表中间节点
    如果判断两个单链表有交?第一个交点在哪里?
  • 原文地址:https://www.cnblogs.com/antao/p/13070110.html
Copyright © 2011-2022 走看看