六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 48|回复: 0

怎么使用InputStreamReader

[复制链接]

升级  10.8%

386

主题

386

主题

386

主题

探花

Rank: 6Rank: 6

积分
1216
 楼主| 发表于 2013-1-27 04:59:02 | 显示全部楼层 |阅读模式
网上介绍:重要的类是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( );
        }
      }
    }
  }
}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表