首页 > 解决方案 > 从控制台读取由另一个类中的函数编写的字符串

问题描述

我正在用 Java 中的 POO 制作一个程序,当一个函数正确完成时,它会打印到控制台:

System.out.println("Si sirvio")

如果函数产生错误,它会打印错误。我希望另一个类中的另一个函数可以读取控制台中的内容,以确定许多函数的流程复合进度。我不能使用扫描仪,因为它会暂停程序,直到用户输入一个字符串,在我的情况下,我希望扫描仪或我应该使用的任何东西在每次写入时读取控制台上的内容。

换句话说,我想要一个事件侦听器,每次写入时读取控制台中的内容。

标签: java

解决方案


您可以尝试将 System.out 简单地重定向到一些OutputStream,然后检查此流以获取结果:

import java.io.*;

class A {
    A() {
        System.out.println("instance of A created");
    }

    public void foo() {
        System.out.println("A::foo() succeeded");
    }
}

class B {
    static {
        System.out.println("static block in B executed");
    }

    public B() {
      System.out.println("instance of B created");  
    }
}

public class Test {

    private static void methodA() {
        System.out.println("Method A succeeded!");
    }

    public static void main(String[] args) {
        ByteArrayOutputStream out = new ByteArrayOutputStream();    
        System.setOut(new PrintStream(out));    

        System.out.println("Main output");
        methodA();
        System.err.println("1. Printed after `System.out` redirect:\n" + out.toString());

        A a = new A();
        B b = new B();
        a.foo();
        System.err.println("2. Printed after `System.out` redirect:\n" + out.toString());
    }
}

您将在以下位置获得此输出System.err

1. Printed after `System.out` redirect:
Main output
Method A succeeded!

2. Printed after `System.out` redirect:
Main output
Method A succeeded!
instance of A created
static block in B executed
instance of B created
A::foo() succeeded

推荐阅读