欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

IO流 (四) ----- 转换流和标准字节输出流

程序员文章站 2022-12-20 14:15:22
文章目录转换流(字节转字符)标准字节输出流PrintStream转换流(字节转字符)InputStreamReaderOutputStreamWriter应用场景:构造BufferedReader/BufferedWriter时,其构造方法中只能传入字符流(Reader/Writer),我们现在只有一个字节流FileInputStream/FileOutputStream,则需要通过转换流先把字节流转换为字符流。代码实现: BufferedReader br = null;...
相关文章:
  1. 《IO流 (一) ----- 基本概念和File类》
  2. 《IO流 (二) ----- 文件流》
  3. 《IO流 (三) ----- 字符流和字符缓冲流》
  4. 《IO流 (四) ----- 转换流和标准字节输出流》
  5. 《IO流 (五) ----- 对象数据的序列化和反序列化》


本篇涉及内容


  • 转换流

  • 标准字节输出流



转换流(字节转字符)


  • InputStreamReader
  • OutputStreamWriter
  1. 应用场景:构造BufferedReader/BufferedWriter时,其构造方法中只能传入字符流(Reader/Writer),我们现在只有一个字节流FileInputStream/FileOutputStream,则需要通过转换流先把字节流转换为字符流。

  2. 代码实现:

         BufferedReader br = null;
         BufferedWriter bw = null;
    
         try {
             
             FileInputStream fis = new FileInputStream("Test/originTextFile.txt");
             FileOutputStream fos = new FileOutputStream("Test/targetTextFile.txt");
             
             br = new BufferedReader(new InputStreamReader(fis));
             bw = new BufferedWriter(new OutputStreamWriter(fos));
             
    
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         } finally {
             if (br != null) {
                 try {
                     //只用关闭最外层流
                     br.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
    
             if (bw != null) {
                 try {
                     //只关闭最外层流
                     bw.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
         }
    


标准字节输出流PrintStream


我们先来看一下System.out.println()这段代码
IO流 (四) ----- 转换流和标准字节输出流
可以看见System.out返回了一个PrintStream对象,因此我们可以推断println()这个方法是PrintStream类中的方法,下面我们来创建一个PrintStream对象试试。
IO流 (四) ----- 转换流和标准字节输出流
PrintStream的构造方法有多种实现,这里我们通过文件字节输出流来构造PrintStream对象,并且调用println()方法输出一段文字到文件中。
IO流 (四) ----- 转换流和标准字节输出流
IO流 (四) ----- 转换流和标准字节输出流
我们知道System.out.println()这段代码的作用的向控制台输出,那么我们可以改变它的输出方向吗?当然可以!通过System.setOut()方法实现。
IO流 (四) ----- 转换流和标准字节输出流
需要传入一个PrintStream对象进去。
IO流 (四) ----- 转换流和标准字节输出流
现在打印出来的字符串不再出现在控制台中,而是出现在了log.txt文件中。
IO流 (四) ----- 转换流和标准字节输出流
IO流 (四) ----- 转换流和标准字节输出流
下面我们通过上述方法来实现一个Logger工具类。

public class Logger {
    public static void log(String msg) {

        try {
            //指向一个日志文件
            PrintStream ps = new PrintStream(new FileOutputStream("Test/log.txt",true));
            //改变输出方向
            System.setOut(ps);
            //日期当前时间
            Date nowTime = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
            String strTime = sdf.format(nowTime);

            System.out.println(strTime + ": " + msg);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}


本文地址:https://blog.csdn.net/k909397116/article/details/107363433