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的一些简单认识,不对不妥之处请大家指出^^

阅读更多
文章标签: Java
个人分类: JAVA
下一篇dom4j 输出中文
想对作者说点什么? 我来说一句

文件流总结

2018年03月31日 29KB 下载

Java /io总结 很不错

2010年02月28日 36KB 下载

没有更多推荐了,返回首页

关闭
关闭
关闭