标准输出流
Java通过系类System实现标准输入\输出的功能,定义了三个变量:in、out、err。这3个流在Java中都定义为静态变量,可以直接通过System类进行调用。
- System.in : 表示标准输入,通常指从键盘输入数据
- System.out : 表示标准输出,通常指把数据输出到控制台或屏幕
- System.err : 表示标准错误输出,通常指把数据输出到控制台或屏幕
out与err的区别:
- out用于正常的用户指定的输出;err专门用于显示错误输出
- 在eclipse里运行,直观差别就是二者显示的颜色有所区别
- System.out.println可能会被缓冲,而System.err.println不会,由于err不需要缓冲,即造成了我们视觉上看到的位置的不确定性
代码示例:
public class PrintStreamTest {
public static void main(String[] args) {
//联合起来写
System.out.println("hello world");
//out是System类中的一个静态数据成员,这个成员就是PrintStream类的引用
//分开写
PrintStream ps = System.out;
ps.println("葛蔓蔓");
//标准输出流不需要手动close()关闭
//可以改变标准输出流的输出方向吗?可以
/*
这些是之前System类使用过的方法和属性
//建议垃圾回收
System.gc();
//返回格林尼治时间到现在的毫秒数
System.currentTimeMillis();
//退出当前正在运行的JVM
System.exit(0);
//数组拷贝
System.arraycopy(...);
*/
try {
//标准输出流不再指向控制台,而是指向"语录3.0"
PrintStream printStream = new PrintStream(new FileOutputStream("E:/Typora笔记/JavaSE/IO流/语录3.0.txt"));
//修改输出方向,将输出方向修改到"语录3.0"
System.setOut(printStream);
//再输出,会将文本文档里面的内容进行覆盖
System.out.println("hello world!");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
标准输出流不需要手动close()关闭
代码示例【日志工具】:
/*
日志工具
*/
public class Logger {
public static void log(String msg) {
try {
//指向一个日志文件
PrintStream out = new PrintStream(new FileOutputStream("E:/Typora笔记/JavaSE/IO流/语录3.0.txt",true));
//修改输出方向
System.setOut(out);
//日期当前时间
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS");
String strTime = sdf.format(date);
System.out.println(strTime+":"+msg);
//这里err不会输出到文本文档,而是在控制台输出
System.err.println("操作不规范!");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
public class LogTest {
public static void main(String[] args) {
//测试工具类是否好用
Logger.log("调用了System类的gc()方法,建议启动垃圾回收");
Logger.log("调用了UserService的doSome()方法");
Logger.log("用户尝试进行登录,验证失败!");
}
}
运行结果【控制台】:
操作不规范!
操作不规范!
操作不规范!
运行结果【文本文档】:
2022-09-06 10:13:55:688:调用了System类的gc()方法,建议启动垃圾回收
2022-09-06 10:13:55:901:调用了UserService的doSome()方法
2022-09-06 10:13:55:906:用户尝试进行登录,验证失败!