IO流 (四) ----- 转换流和标准字节输出流
程序员文章站
2022-12-20 14:15:22
文章目录转换流(字节转字符)标准字节输出流PrintStream转换流(字节转字符)InputStreamReaderOutputStreamWriter应用场景:构造BufferedReader/BufferedWriter时,其构造方法中只能传入字符流(Reader/Writer),我们现在只有一个字节流FileInputStream/FileOutputStream,则需要通过转换流先把字节流转换为字符流。代码实现: BufferedReader br = null;...
相关文章:
- 《IO流 (一) ----- 基本概念和File类》
- 《IO流 (二) ----- 文件流》
- 《IO流 (三) ----- 字符流和字符缓冲流》
- 《IO流 (四) ----- 转换流和标准字节输出流》
- 《IO流 (五) ----- 对象数据的序列化和反序列化》
本篇涉及内容
-
转换流
-
标准字节输出流
转换流(字节转字符)
- InputStreamReader
- OutputStreamWriter
-
应用场景:构造BufferedReader/BufferedWriter时,其构造方法中只能传入字符流(Reader/Writer),我们现在只有一个字节流FileInputStream/FileOutputStream,则需要通过转换流先把字节流转换为字符流。
-
代码实现:
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()
这段代码
可以看见System.out
返回了一个PrintStream对象,因此我们可以推断println()
这个方法是PrintStream类中的方法,下面我们来创建一个PrintStream对象试试。
PrintStream的构造方法有多种实现,这里我们通过文件字节输出流来构造PrintStream对象,并且调用println()
方法输出一段文字到文件中。
我们知道System.out.println()
这段代码的作用的向控制台输出,那么我们可以改变它的输出方向吗?当然可以!通过System.setOut()
方法实现。
需要传入一个PrintStream对象进去。
现在打印出来的字符串不再出现在控制台中,而是出现在了log.txt文件中。
下面我们通过上述方法来实现一个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