zoukankan      html  css  js  c++  java
  • Java IO流:(十三)InputStreamReader & OutputStreamWriter

    一、InputStreamReader

      1、InputStreamReader 类概述

        实现将字节的输入流按指定字符集转换为字符的输入流。

        需要和InputStream“套接”,转换流 java.io.InputStreamReader ,是Reader的子类,是从字节流到字符流的桥梁。

        该类读取字节,并使用指定的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。 

      2、InputStreamReader 类结构

        

         

      3、InputStreamReader 构造器

    InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。
    
    InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。
    

        

        参数

         InputStream in:字节输入流,用来读取文件中保存的字节

         String charsetName:指定的编码表名称,不区分大小写,可以是utf-8/UTF-8,gbk/GBK,...不指定默认使用UTF-8

      4、常用方法

    int read() 读取单个字符并返回。
    int read(char[] cbuf)一次读取多个字符,将字符读入数组。
    void close() 关闭该流并释放与之关联的所有资源。
    

      

      5、使用步骤

        ① 创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称

        ② 使用InputStreamReader对象中的方法read读取文件

        ③ 释放资源

        注意:构造方法中指定的编码表名称要和文件的编码相同,否则会发生乱码

      6、案例

     1     @Test
     2     public void test() throws IOException {
     3 
     4         FileInputStream fis = new FileInputStream("dbcp.txt");
     5         //InputStreamReader isr = new InputStreamReader(fis);//使用系统默认的字符集
     6         //参数2指明了字符集,具体使用哪个字符集,取决于文件dbcp.txt保存时使用的字符集
     7         InputStreamReader isr = new InputStreamReader(fis,"UTF-8");//使用指定的字符集
     8 
     9         char[] cbuf = new char[20];
    10         int len;
    11         while((len = isr.read(cbuf)) != -1){
    12             String str = new String(cbuf,0,len);
    13             System.out.print(str);
    14         }
    15 
    16         isr.close();
    17 
    18     }

      7、

    二、OutputStreamWriter

      1、OutputStreamWriter 类概述

        实现将字符的输出流按指定字符集转换为字节的输出流。

        需要和OutputStream“套接”,转换流 java.io.OutputStreamWriter,是Writer的子类,是从字符流到字节流的桥梁。

        它使用指定的字符集将字符编码为字节。它的字符集可以由名称指定,也可以接受平台的默认字符集。 

        

      2、OutputStreamWriter 类结构

        

         

      3、构造方法

    OutputStreamWriter(OutputStream out)创建使用默认字符编码的 OutputStreamWriter。
    
    OutputStreamWriter(OutputStream out, String charsetName) 创建使用指定字符集的 OutputStreamWriter。
    

      

        参数:

         OutputStream out:字节输出流,可以用来写转换之后的字节到文件中

         String charsetName:指定的编码表名称,不区分大小写,可以是utf-8/UTF-8,gbk/GBK,...不指定默认使用UTF-8

      4、常用方法

    void write(int c) 写入单个字符。
    
    void write(char[] cbuf)写入字符数组。
    
    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() 关闭此流,但要先刷新它。
    

      

      5、使用步骤

        ① 创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表名称

        ② 使用OutputStreamWriter对象中的方法write,把字符转换为字节存储缓冲区中(编码)

        ③ 使用OutputStreamWriter对象中的方法flush,把内存缓冲区中的字节刷新到文件中(使用字节流写字节的过程)

        ④ 释放资源

      6、案例

     1 public static void main(String[] args) throws IOException {
     2     //1.创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表名称
     3     //OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\utf_8.txt"),"utf-8");
     4     OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\utf_8.txt"));//不指定默认使用UTF-8
     5     //2.使用OutputStreamWriter对象中的方法write,把字符转换为字节存储缓冲区中(编码)
     6     osw.write("你好");
     7     //3.使用OutputStreamWriter对象中的方法flush,把内存缓冲区中的字节刷新到文件中(使用字节流写字节的过程)
     8     osw.flush();
     9     //4.释放资源
    10     osw.close();
    11 }

    三、应用案例

      1、转换文件编码

        要求:GBK编码的文本文件,转换为UTF-8编码的文本文件。 

     1 /*
     2     分析:
     3         1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称GBK
     4         2.创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表名称UTF-8
     5         3.使用InputStreamReader对象中的方法read读取文件
     6         4.使用OutputStreamWriter对象中的方法write,把读取的数据写入到文件中
     7         5.释放资源
     8  */
     9  public static void main(String[] args) throws IOException {
    10         //1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称GBK
    11         InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\我是GBK格式的文本.txt"),"GBK");
    12         //2.创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表名称UTF-8
    13         OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\我是utf_8格式的文件.txt"),"UTF-8");
    14         //3.使用InputStreamReader对象中的方法read读取文件
    15         int len = 0;
    16         while((len = isr.read())!=-1){
    17             //4.使用OutputStreamWriter对象中的方法write,把读取的数据写入到文件中
    18             osw.write(len);
    19         }
    20         //5.释放资源
    21         osw.close();
    22         isr.close();
    23     }

       

     1     @Test
     2     public void test() throws Exception {
     3         //1.造文件、造流
     4         File file1 = new File("dbcp.txt");
     5         File file2 = new File("dbcp_gbk.txt");
     6 
     7         FileInputStream fis = new FileInputStream(file1);
     8         FileOutputStream fos = new FileOutputStream(file2);
     9 
    10         InputStreamReader isr = new InputStreamReader(fis,"utf-8");
    11         OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");
    12 
    13         //2.读写过程
    14         char[] cbuf = new char[20];
    15         int len;
    16         while((len = isr.read(cbuf)) != -1){
    17             osw.write(cbuf,0,len);
    18         }
    19 
    20         //3.关闭资源
    21         isr.close();
    22         osw.close();
    23 
    24 
    25     }
  • 相关阅读:
    C++中整型变量的存储大小和范围
    A1038 Recover the Smallest Number (30 分)
    A1067 Sort with Swap(0, i) (25 分)
    A1037 Magic Coupon (25 分)
    A1033 To Fill or Not to Fill (25 分)
    A1070 Mooncake (25 分)
    js 获取控件
    C#代码对SQL数据库添加表或者视图
    JS 动态操作表格
    jQuery取得下拉框选择的文本与值
  • 原文地址:https://www.cnblogs.com/niujifei/p/14855908.html
Copyright © 2011-2022 走看看