eimhee 发表于 2013-1-27 04:59:02

怎么使用InputStreamReader

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

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


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

java StreamRecoderUTF-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);
      File outfile = new File(args);
      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);
    // osw = new OutputStreamWriter(fout, args);
      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);
      File outfile = new File(args);
      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);
      osw = new OutputStreamWriter(fout, args);
      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( );
      }
      }
    }
}
}
页: [1]
查看完整版本: 怎么使用InputStreamReader