IO流之转换流、打印流、缓存读取流

目录

一、转换流

InputStreamReader

OutputStreamWriter

二、打印流

PrintStream

PrintWriter

三、缓存读取流


一、转换流

  • 转换流又称为装饰流,用于将字节流装饰为字符流
    • 使用了装饰者设计模式

InputStreamReader

  • 用于将字节输入流转换为字符输入流
  • 构造方法
构造器 描述
InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader
InputStreamReader(InputStream in,String charsetName) 创建一个使用指定charset的InputStreamReader
  • API
返回值类型 方法名称 描述
String         getEncoding() 返回此流使用的字符编码的名称
int         read() 读取一个字符
int read(char[] cbuf,int offset, int length) 将字符读入数组的一部分,从offset开始读取length个数据
boolean ready() 判断此流是否可以读取
  • 举例
public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("I:\\a.txt");
        InputStreamReader reader = new InputStreamReader(fis);
        char[] chars = new char[128]; //字符缓存数组
        int len = -1; //每次读取的长度
        while ((len = reader.read(chars))!=-1){
            //锄禾日当午,汗滴禾下土
            System.out.println(new String(chars,0,len));
        }
        reader.close();
        fis.close();
    }

OutputStreamWriter

  • 用于将字节输出流转换为字符输出流
  • 构造方法
构造器 描述
OutputStreamWriter(OutputStream in) 创建一个使用默认字符集的OutputStreamWriter
OutputStreamWriter(OutputStream in,String charsetName) 创建一个使用指定charset的OutputStreamWriter
  • API
返回值类型 方法名称 描述
void  flush() 刷新流对象,将缓存中的字符强制写入文件中
String getEncoding() 返回此流使用的字符编码的名称
void  write(char[] cbuf,int off,int len) 写一个字符数组的一部分
void write(int c) 写一个字符
void write(String str,int off,int len) 写一个字符串的一部分
  • 举例
public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("I:\\a.txt");
        OutputStreamWriter writer = new OutputStreamWriter(fos);
        writer.write("床前明月光");
        writer.close();
        fos.close();
    }

二、打印流

  • 常用于字符输出,相较于字符输出流,打印流输出文本内容更加便利
  • 如果要写入某些内容,更建议把输出流转化为打印流进行操作

PrintStream

  • 常用的控制台打印语句System.out.println()就是使用了该打印流
  • 常用构造方法
构造器 描述
PrintStream(File file) 使用指定的文件创建打印流对象
PrintStream(OutputStream out) 根据传入的字节输出流创建打印流对象
PrintStream(String fileName) 使用指定的文件名创建打印流对象
  • 常用API
    • 在封装的对象的API基础上,加多了print和println等方法,用于打印一行或打印不换行的数据写入文本中
  • 举例
public static void main(String[] args) throws IOException {
        //append设置为true,在原来文件的基础上继续添加数据
        FileOutputStream fso = new FileOutputStream("I:\\a.txt",true);
        //将字节输出流封装成打印流
        PrintStream ps = new PrintStream(fso);
        ps.println("床前明月光");
        ps.println("疑是地上霜");
        ps.append("锄禾日当午").append("汗滴禾下土");
        ps.close();
        fso.close();
    }

PrintWriter

  • 可以理解为是PrintStream的升级,两者的功能相差不是太大
    • 在输出字符后,需要用flush刷新一下,或调用close()方法才能写入数据
  • 构造方法
    • 可以根据File对象,或OutputStream对象,或Writer对象,或String代表的文件创建打印流
  • 常用API
    • 同PrintStream
  • 用完之后记得flush一下,否则可能写不进文件中
  • 举例
public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("I:\\a.txt");
        PrintWriter writer = new PrintWriter(fw);
        writer.println("锄禾日当午");
        writer.println("汗滴禾下土");
        //需要flush一下
        writer.flush();
        writer.append("床前明月光").append("疑是地上霜");
        writer.flush();
        writer.close();
        fw.close();
    }

三、缓存读取流

  • 指的是BufferedReader
  • 用于将字符输入流转换为带有缓存,且可以一次读取一行的缓存字符读取流
    • 如果是字节流,需要先转换为字符流,再转换为缓冲流
  • 构造方法
构造器 描述
BufferedReader(Reader in) 创建使用默认大小的输入缓冲区的缓冲字符输入流
BufferedReader(Reader in, int sz) 创建使用指定大小的输入缓冲区的缓冲字符输入流
  • 常用API
返回值类型 方法名 描述
int  read() 读取一个字符
String readLine() 读取一行文字
  • 举例
public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("I://a.txt");
        BufferedReader reader = new BufferedReader(fr);
        //读取的文本
        String text = null;
        while ((text = reader.readLine())!=null){
            //读取一行数据
            System.out.println(text);
        }
    }

猜你喜欢

转载自blog.csdn.net/future_god_qr/article/details/121206562