在使用IO流时该选择何种对象是很多人的一个问题。一下通过一个判断顺序和案例来回答这个问题
一:先介绍简单介绍一下流
流可以分为字符流和字节流两种类型
字节流对应InputSteam(输入流)和OutStream(输出流)。
字符流对应Reader(输入流)和Writer(输出流)。
二:现在介绍选择规则
(1)通过设备输入流
若输入流是字节则选择InputStream。
若输入流是纯文本则选择Reader。
(2)通过设备判断输出流
若输出流是字节,则选择outputstream。
若输出流是纯文本,则选择Writer。
三:现在运用一个例子来表现上面的规则
需求:将一个文本文件的内容通过控制台打印出来。
1.文本文件是一个纯文本文件
所以输入流是Reader
在Reader中操作文件的类是FileReader
所以FileReader fd = new FileReader("123.txt");
若要提高读取效率,则使用缓冲区
所以BufferedReader brd = new BufferedReader(reader);
2.以为读取的是纯文本,所以输出流使用Writer
而控制台的输出System.out是一个字节流
所以需要把字符流装换为字节流进行输出
所以选择转换流 OutputStreamWriter
OutputStreamWriter out = new OutputStreamWriter(System.in);
若要提高效率,则使用BufferedWriter
所以:BufferedWriter brw = new BufferedWriter(out);
以下是代码示例
1 package com.sjj.io; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.FileReader; 6 import java.io.IOException; 7 import java.io.OutputStreamWriter; 8 9 public class Test01 { 10 11 12 public static void main(String[] args){ 13 BufferedReader brd = null; 14 BufferedWriter brw = null; 15 try { 16 brd = new BufferedReader(new FileReader("d:\fileIo.txt")); 17 brw = new BufferedWriter(new OutputStreamWriter(System.out)); 18 String str = null; 19 while((str = brd.readLine()) != null){ 20 brw.write(str); 21 brw.newLine(); 22 brw.flush(); 23 } 24 } catch (IOException e) { 25 // TODO Auto-generated catch block 26 e.printStackTrace(); 27 }finally{ 28 if (brd != null) { 29 try { 30 brd.close(); 31 } catch (IOException e) { 32 // TODO Auto-generated catch block 33 e.printStackTrace(); 34 } 35 } 36 if (brd != null) { 37 try { 38 brw.close(); 39 } catch (IOException e) { 40 // TODO Auto-generated catch block 41 e.printStackTrace(); 42 } 43 } 44 } 45 46 } 47 48 }