• 字符流数据的写出和读取


    写出数据 FileWriter

    路径下没有文件,会创建文件,如果该文件已存在,会被覆盖

    FileWriter write = new FileWriter(“E:\a.txt”);

    写出数据

    流程:数据—>缓冲区满了>文件   //缓冲区满了才会将数据写入文件

    wirter.write(“abc”);   //当数据比较少,写到缓冲区,缓冲区还没满程序已经结束,所以不会写出数据

    冲刷缓冲区,把还未写满数据的缓冲区冲刷出去,数据就会写入文件

    writer.flush();

    输出流使用完之后,要进行关流操作,以防程序占用内存而导致其它程序不能调用

    writer.close();   //关流之前会自动做一次冲刷缓冲区的操作

    释放资源

    writer = null;

    写出数据过程中异常的处理

    package cn.jay.exer;
    import java.io.FileWriter;
    import java.io.IOException;
    public class FileWriterDemo {
        public static void main(String[] args) {
        //一、将流对象放到try之外定义并且赋值为null,放到try内创建
        //流对象try外定义是为了防止finally中不能调用writer
            FileWriter writer = null;
            try {
                writer = new FileWriter("E:\a.txt");
                writer.write("abc");
        //四、写完数据之后需要手动冲刷一次缓冲区,防止关流失败后数据在内存中得不到释放
                writer.flush();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
        //二、关流之前需要判断是否为空,如果为空,null.close无意义
                if (writer != null)
                    try {
                        writer.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
        //三、关流之后要将对象强制置为null,释放内存占用
                        writer = null;
                    }
            }
        }
    }

    读取数据 FileReader

    FileReader没有缓冲区,需要手动提供一个字符数组作为缓冲区来使用

     

    import java.io.FileReader;
    import java.io.IOException;
    public class FileInputStreamDemo {
        public static void main(String[] args) throws IOException {
           //一次读取一个字符
            FileReader reader = new FileReader("E:\a.txt");
            //定义一个变量用来记录每次读取到的字符
            int i  = -1;
            //该read的返回值表示这一次读取到的字符
            while((i = reader.read()) != -1){
                System.out.println((char)i);
            }
            reader.close();
         /*
         //一次读取多个字符
         FileReader reader = new FileReader("E:\a.txt");
            //设置为每次存储10个字符
            char[] c = new char[10];
            //定义一个变量用来记录每次读取到的字符个数,给变量len赋初值(可以是任意值)
            //防止read读取数据失败导致报错
            int len = -1;
            //该read的返回值表示这一次读取到的字符的个数
            while((len = reader.read(c))!=-1)
                System.out.println(new String(c,0,len));
            reader.close();
         */
      }
    }    

     

    引入BufferReader之后:

     

    FileReader   读取数据

     

    BufferReader   提供缓冲区

    BufferReader reader = new BufferReader(new FileReader(“E:\a.txt”));   //装饰设计模式
    //读取一行数据
    //String str = reader.readLine();
    //初始化
    String str = null;
    //读取数据,按行读取,读到null,停止
    while((str = reader.readLine()) != null){
      System.out.println(str);
    }
    //关流
    reader.close();

    装饰设计模式(FileReaderBufferedReader为例)

    利用同类对象(FileReader)构建自己对象本身(BufferedReader),对对象(BufferedReader)身上的功能做了增强或者改善

    注:Java中原生的字符流只能操作字符类文件,但不能读取office组件

     

     

  • 相关阅读:
    GO语言常量和变量
    GO基础
    Dockfile基本语法
    Docker常用命令
    Docker基础
    kibana添加ES索引403错误解决
    CentOS7 重启网卡Failed to start LSB: Bring up/down networking.解决方法
    Logstash进程杀不掉
    ( 转)性能测试--地铁模型分析
    [六]SpringBoot 之 连接数据库(mybatis)
  • 原文地址:https://www.cnblogs.com/lj-cn/p/9374338.html
Copyright © 2020-2023  润新知