Java语言怎么才能读取每一个程序向println对象输出的全部的字符串,并且把这些字符串连接在一起,再提取输出这些字符串的时间

Java语言怎么才能读取每一个程序向println对象输出的全部的字符串,并且把这些字符串连接在一起,再提取输出这些字符串的时间?

可以通过重定向标准输出流来实现
如图:

img


代码如下:

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.Date;

public class ConsoleOutputReader {

    public static void main(String[] args) {
        // 创建一个字节数组输出流
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        
        // 将标准输出流重定向到字节数组输出流
        PrintStream printStream = new PrintStream(outputStream);
        PrintStream originalPrintStream = System.out;
        System.setOut(printStream);

        // 在控制台输出一些信息
        System.out.println("Hello");
        System.out.println("World");
        System.out.println("Today is " + new Date());

        // 获取重定向后的输出内容
        String output = outputStream.toString();

        // 打印连接后的字符串和时间
        System.setOut(originalPrintStream);
        System.out.println("输出: " + output);
        System.out.println("时间: " + new Date());
    }
}


直接用'+'好把两个字符串相加,默认是链接在一起

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/725227
  • 这篇博客你也可以参考下:Java输入一个文件名和一个字符串,判断该文件中是否存在该字符串,如果存在,输入该字符串所在的行数
  • 你还可以看下java参考手册中的 java-集合 - 关于使用和扩展Java集合框架的课程。- 聚合操作 代表你对集合进行迭代,这使你能够编写更简洁和有效的代码,处理存储在集合中的元素。 -平行主义
  • 您还可以看一下 汤小洋老师的手把手搭建Java员工管理系统【附源码】(毕设)课程中的 员工管理系统的部署运行小节, 巩固相关知识点
  • 除此之外, 这篇博客: 最早的90后Java开发已经31岁,最早的00后已进网易大厂,你在哪里?中的 未雨绸缪,早做防范,这才是最佳应对方法 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案

    要实现在Java中读取程序中通过println方法输出的字符串并将其连接在一起,可以通过重定向标准输出流来实现。以下是详细的解决方案和示例代码:

    1. 创建一个PrintStream对象来替代系统的标准输出流System.out,这样可以捕获所有通过println方法输出的字符串。代码如下:
    PrintStream originalOut = System.out; // 保存原始的标准输出流
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PrintStream newOut = new PrintStream(baos);
    System.setOut(newOut); // 设置新的标准输出流
    
    1. 执行带有println语句的程序,所有的输出将被重定向到baos对象中。

    2. 获取程序输出的字符串,并将它们连接在一起。代码如下:

    String programOutput = baos.toString();
    
    1. 恢复原始的标准输出流。代码如下:
    System.setOut(originalOut);
    
    1. 提取输出这些字符串的时间。可以在程序输出时记录时间,并在程序结束后计算时间差。代码如下:
    long startTime = System.currentTimeMillis();
    
    // 执行带有println语句的程序
    
    long endTime = System.currentTimeMillis();
    long elapsedTime = endTime - startTime;
    

    完整示例代码如下:

    import java.io.ByteArrayOutputStream;
    import java.io.PrintStream;
    
    public class OutputCaptureExample {
        public static void main(String[] args) {
            PrintStream originalOut = System.out; // 保存原始的标准输出流
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            PrintStream newOut = new PrintStream(baos);
            System.setOut(newOut); // 设置新的标准输出流
    
            long startTime = System.currentTimeMillis();
    
            // 执行带有println语句的程序
    
            long endTime = System.currentTimeMillis();
            long elapsedTime = endTime - startTime;
    
            String programOutput = baos.toString();
    
            System.setOut(originalOut); // 恢复原始的标准输出流
    
            System.out.println("程序输出的字符串:" + programOutput);
            System.out.println("程序输出所用时间:" + elapsedTime + "毫秒");
        }
    }
    

    请注意,上述解决方案中的代码只能捕获通过println方法输出的字符串。如果程序使用其他输出方法(如printwrite),则必须相应地修改代码以捕获这些输出。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^