怎么使用InputStreamReader

来源:互联网 发布:js怎么设置div的大小 编辑:程序博客网 时间:2024/05/19 23:00

网上介绍:重要的类是InputStreamReader,它是字节转换为字符的桥梁

字节流是什么, 字符流是什么,字节转换为字符不是用char() 强制转换就可以了,  为什么要引进这个类呢?


下面这个程序用字节流处理,也能处理文件

java StreamRecoder  UTF-8 UTF-8 D://kk.txt D://kk2.txt

package

import java.io.*;
public class StreamRecoder {
  public static void main(String[] args) {
    if (args.length < 2) {
      System.err.println(
      "Usage: java StreamRecoder "
        + "infile_encoding outfile_encoding infile outfile");
      return;
    }
    InputStreamReader isr = null;
    OutputStreamWriter osw = null;
    try {
      File infile = new File(args[2]);
      File outfile = new File(args[3]);
      if (outfile.exists( )
        && infile.getCanonicalPath().equals(outfile.getCanonicalPath( ))) {
        System.err.println("Can't convert file in place");
        return;
      }
      FileInputStream fin = new FileInputStream(infile);
      FileOutputStream fout = new FileOutputStream(outfile);
    // isr = new InputStreamReader(fin, args[0]);
    // osw = new OutputStreamWriter(fout, args[1]);
      while (true) {

    
        int c = fin.read( );
        if (c == -1) break;  // end of stream
        fout.write(c);
      }
      fout.close( );
      fin.close( );
    }
    catch (IOException ex) {
      System.err.println(ex);
      ex.printStackTrace( );
    }
    finally {
      if (isr != null) {
        try {
          isr.close( );
        } catch (IOException ex) {
          ex.printStackTrace( );
        }
      }
      if (osw != null) {
        try {
          osw.close( );
        }
        catch (IOException ex) {
          ex.printStackTrace( );
        }
      }
    }
  }
}


我如果改成这样,用字符流来处理, 如果kk.txt是中文, 就会出现乱码,
那用字符流处理还有什么用呢

import java.io.*;
public class StreamRecoder {
  public static void main(String[] args) {
    if (args.length < 2) {
      System.err.println(
      "Usage: java StreamRecoder "
        + "infile_encoding outfile_encoding infile outfile");
      return;
    }
    InputStreamReader isr = null;
    OutputStreamWriter osw = null;
    try {
      File infile = new File(args[2]);
      File outfile = new File(args[3]);
      if (outfile.exists( )
        && infile.getCanonicalPath().equals(outfile.getCanonicalPath( ))) {
        System.err.println("Can't convert file in place");
        return;
      }
      FileInputStream fin = new FileInputStream(infile);
      FileOutputStream fout = new FileOutputStream(outfile);
      isr = new InputStreamReader(fin, args[0]);
      osw = new OutputStreamWriter(fout, args[1]);
      while (true) {
        int c = isr.read( );
        if (c == -1) break;  // end of stream
        osw.write(c);
      }
      osw.close( );
      isr.close( );
    }
    catch (IOException ex) {
      System.err.println(ex);
      ex.printStackTrace( );
    }
    finally {
      if (isr != null) {
        try {
          isr.close( );
        } catch (IOException ex) {
          ex.printStackTrace( );
        }
      }
      if (osw != null) {
        try {
          osw.close( );
        }
        catch (IOException ex) {
          ex.printStackTrace( );
        }
      }
    }
  }
}