转换流
标准字节输出流
应用场景:构造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();
}
}
}
我们先来看一下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
如对本文有疑问, 点击进行留言回复!!
before社区电量是什么意思 Before社区电量获得方法
RecycleView入门详解(教你全面掌握RecycleView用法)
动态权限请求框架RxPermissions(几行代码搞定权限)
URL路径@PathVariable出现点号“.“时值遭截断问题
网友评论