java - 从控制台读取由另一个类中的函数编写的字符串
问题描述
我正在用 Java 中的 POO 制作一个程序,当一个函数正确完成时,它会打印到控制台:
System.out.println("Si sirvio")
如果函数产生错误,它会打印错误。我希望另一个类中的另一个函数可以读取控制台中的内容,以确定许多函数的流程复合进度。我不能使用扫描仪,因为它会暂停程序,直到用户输入一个字符串,在我的情况下,我希望扫描仪或我应该使用的任何东西在每次写入时读取控制台上的内容。
换句话说,我想要一个事件侦听器,每次写入时读取控制台中的内容。
解决方案
您可以尝试将 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
推荐阅读
- c - 在 fork() 之后使用 printf 并且父进程处于 wait() 时的意外行为
- sql - 如何使用 BYTES 类型的列来过滤 BigQuery 上的结果
- sql - ORDER BY before WHERE - 替代品?
- powerbi - 在power BI中通过多个条件搜索第二个最大值
- spring-boot - 如何在springboot中将@Value属性从application.properties注入@InjectMocks?
- c# - JWT Authentication .Net core [Authorize] 属性被控制器忽略
- java - 在“检查许可证状态”期间发生内部错误。ECLIPSE_HOME 未定义
- java - 从内向外循环一个 for int 循环
- flutter - 颤振)我想使用 shared_preferences 2.0.8 创建一个本地保存的收藏夹按钮
- javascript - 在 Typescript 和 React 中提交时更新 localStorage 值