Java------IO流之标准输出流

标准输出流

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:用户尝试进行登录,验证失败!

你可能感兴趣的:(IO流,java,jvm,学习,intellij-idea)