IO总结(一)

 

IO 总结(一)

——FileReader FileWriterInputStreamReader OutputStreamWriterUTF-8 编码的文本

 

一、类的层次结构

FileReader

java.lang.Object

  java.io.Reader

      java.io.InputStreamReader

          java.io.FileReader

 

InputStreamReader

java.lang.Object

  java.io.Reader

      java.io.InputStreamReader

 

FileWriter

java.lang.Object

  java.io.Writer

      java.io.OutputStreamWriter

          java.io.FileWriter

 

OutputStreamWriter

java.lang.Object

  java.io.Writer

      java.io.OutputStreamWriter

 

FileReader 和FileWriter 分别是InputStreamReaderOutputStreamWriter 的直接子类,InputStreamReaderOutputStreamWriter 是字符流通向字节流的桥梁,可以显示的指定字符编码,因为转码是发生在字节流和字符流的临界处的(我是这么理解的^_^ );而FileReaderFileWriter 是处理字符文件的便捷类,使用的是默认的字符编码。

 

二、读UTF-8 字符编码的文件

1 、使用FileReader

public static String readUsingFileReader(String fileName,

String encoding) throws IOException{

         StringBuffer sb = new StringBuffer();

         BufferedReader in = new BufferedReader(

                   new FileReader(fileName));

         String s ;

         while ((s=in.readLine())!= null ){

              s = new String((s+ "\n" ).getBytes(),encoding);

              sb.append(s);

         }

         in.close();

         return sb.toString();

     }

2 、使用InputStreamReader

public static String readUsingInputStreamReader(String fileName,String encoding)

throws IOException{

         StringBuffer sb = new StringBuffer();

         BufferedReader in = new BufferedReader(

                   new InputStreamReader( new FileInputStream(fileName),encoding));

         String s ;

         while ((s=in.readLine())!= null ){

              sb.append(s);

              sb.append( "\n" );

         }

         in.close();

         return sb.toString();

     }

 

使用 FileReader 类我们需要通过 new String((s+ "\n" ).getBytes(),encoding) 进行转码,按我的理解应该是可以的,但我发现还是会出现一些汉字无法解析出来,原因我暂时还没找出来。使用 InputStreamReader 类时我们指定好编码方式能很好的解析。

 

写文件和读文件差不多。

1 、使用FileWriter

public static void writeUsingFileWriter(String fileName,String text,

              String encoding) throws IOException{

         PrintWriter out = new PrintWriter(

                   new FileWriter(fileName));

         text = new String(text.getBytes(encoding));

         out.print(text);

         out.close();

     }

2 、使用OutputStreamWriter

     public static void writeUsingOutputStreamWriter(String

fileName,String text,String encoding) throws IOException{

         PrintWriter out = new PrintWriter(

new OutputStreamWriter(

new FileOutputStream(fileName),encoding));

         out.print(text);

         out.close();

     }

 

同样的问题出现在这2 个类上。迷茫中


其实上述的问题在我以前用SmartUpload 时就出现过,一直没在意,commonsio 包和fileupload 包很好的解决了这个问题,希望可以从中得到启示,继续学习中……

 

以上是我对IO的一些简单认识,不对不妥之处请大家指出^^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值