zoukankan      html  css  js  c++  java
  • Java 之 字符输出流[Writer]

    一、字符输出流

      java.io.Writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。

        它定义了字节输出流的基本共性功能方法。

    void write(int c) 写入单个字符。写入0 到 65535 之间的Unicode码。
    void write(char[] cbuf) 把整个字符数组的内容写进去。
    abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
    void write(String str) 写入字符串。
    void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。
    void flush() 刷新该流的缓冲,则立即将它们写入预期目标。
    void close() 关闭此输出流并释放与该流关联的所有系统资源
    

      Writer 抽象类下面的子类结构:

       图中深色的为节点流,浅色的为处理流。

    二、FileWriter 类

      java.io.FileWriter 类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区 。

      作用:把内存中字符数据写入到文件中。

      1、构造方法

    FileWriter(File file) : 创建一个新的 FileWriter,给定要读取的File对象。
    FileWriter(String fileName) : 创建一个新的 FileWriter,给定要读取的文件的名称。
    

         参数:写入数据的目的地。

          File file:文件对象

          String fileName:文件的路径。

          构造方法作用

          ① 会创建一个 FileWriter 对象

          ② 会根据构造方法中传递的文件 / 文件的路径,创建对象

          ③ 会把 FileWriter 对象指向创建好的文件。

          字符输出流的使用步骤重要】:

          ① 创建FileWriter对象,构造方法中绑定要写入数据的目的地

          ② 使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)

          ③ 使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中

          ④ 释放资源(会先把内存缓冲区中的数据刷新到文件中)

      2、基本写入数据

        (1)写出字符write(int b) 方法,每次可以写出一个字符数据,代码使用演示:

     1 public static void main(String[] args) throws IOException {
     2         //1.创建FileWriter对象,构造方法中绑定要写入数据的目的地
     3         FileWriter fw = new FileWriter("E:\d.txt");
     4         //2.使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)
     5         //void write(int c) 写入单个字符。
     6         fw.write(97);
     7         //3.使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中
     8         fw.flush();
     9         //4.释放资源(会先把内存缓冲区中的数据刷新到文件中)
    10         fw.close();
    11     }

         注意:如果未调用 close 方法,数据只是保存到了缓冲区,并未写出到文件中。

        (2)关闭与刷新

          区别:

    flush :刷新缓冲区,流对象可以继续使用。
    close : 先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。
    

          Demo:

     1  public static void main(String[] args) throws IOException {
     2         //1.创建FileWriter对象,构造方法中绑定要写入数据的目的地
     3         FileWriter fw = new FileWriter("E:\e.txt");
     4         //2.使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)
     5         //void write(int c) 写入单个字符。
     6         fw.write(97);
     7         //3.使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中
     8         fw.flush();
     9         //刷新之后流可以继续使用
    10         fw.write(98);
    11 
    12         //4.释放资源(会先把内存缓冲区中的数据刷新到文件中)
    13         fw.close();
    14 
    15         //close方法之后流已经关闭了,已经从内存中消失了,流就不能再使用了
    16         fw.write(99);//IOException: Stream closed
    17     }

        注意即便是flush方法写出了数据,操作的最后还是要调用close方法,释放系统资源。 

      3、写出其他数据

        (1)写出字符数组:write(char[] cbuf) write(char[] cbuf, int off, int len) ,每次可以写出字符数组中的数据,用法类似FileOutputStream,代码使用演示:

     1  public static void main(String[] args) throws IOException {
     2         FileWriter fw = new FileWriter("E:\f.txt");
     3         char[] cs = {'a','b','c','d','e'};
     4         //void write(char[] cbuf)写入字符数组。
     5         fw.write(cs);//abcde
     6 
     7         //void write(char[] cbuf, int off, int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
     8         fw.write(cs,1,3);//bcd
     9 
    10         fw.close();
    11     }

     

        (2)写出字符串:write(String str) write(String str, int off, int len) ,每次可以写出字符串中的数据,更为方便,代码使用演示:

     1  public static void main(String[] args) throws IOException {
     2         FileWriter fw = new FileWriter("E:\f.txt");
     3    
     4         //void write(String str)写入字符串。
     5         fw.write("博客园");//博客园 6 
     7         //void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。
     8         fw.write("天道酬勤啊",2,3);//酬勤啊
     9 
    10         fw.close();
    11     }

        (3)续写和换行

          续写,追加写:使用两个参数的构造方法

    FileWriter(String fileName, boolean append)
    FileWriter(File file, boolean append)
    

                         参数

            String fileName,File file:写入数据的目的地。

            boolean append:续写开关 true:不会创建新的文件覆盖源文件,可以续写; false:创建新的文件覆盖源文件。

          换行:换行符号

            windows:

            Linux / Unix:

            mac:

          Demo :

    1 public static void main(String[] args) throws IOException {
    2         FileWriter fw = new FileWriter("E:\g.txt",true);
    3         for (int i = 0; i <10 ; i++) {
    4             fw.write("HelloWorld"+i+"
    ");
    5         }
    6 
    7         fw.close();
    8     }

    注意:字符流,只能操作文本文件,不能操作图片,视频等非文本文件。单纯读或者写文本文件时,使用字符流,其他情况使用字节流。

  • 相关阅读:
    Mycat读写分离+高可用笔记
    MyCAT基础安装笔记
    C# Winform中DataGridView的DataGridViewCheckBoxColumn CheckBox选中判断
    C# winform DataTable 批量数据处理 增、删、改 .
    选中CheckBoxList的值放到TextBox中,再次选中从textBox中删除
    dede后台删除文章后台还有分页显示解决方法
    dedecms数据库表说明大全
    织梦自增函数[field:global name=autoindex/]常见用法
    http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码
    web.config设置之system.webServer 详细介绍,为网站设置默认文档
  • 原文地址:https://www.cnblogs.com/niujifei/p/11489087.html
Copyright © 2011-2022 走看看