基本上我正在创建一个应该从另一个类读取一系列整数的类。
另一个类是System.out。按以下顺序打印整数:
i i i i
i i i i
... etc.
所以我基本上想要创建一个String文件或者其他任何工作,我可以在第一个类中读取这个输出。
我很丢失,我不知道是否应该创建一个Scanner(System.in),如果是的话,该如何处理它。
我想这是一个非常开放的问题,所以请提前道歉。
答案 0 :(得分:1)
重定向System.out
是一种解决方案,但是会为所有类重定向System.out
- 您不能(轻松)重新定向这一类专属。
也许这个“其他类”在您的控制之下,您可以将其视为重组代码的机会。所以也许你有类似的东西:
public void print(int[] values) {
// ...
System.out.println(result);
}
然后您可以将代码更改为
public String prepareResult(int[] values) {
// ...
return result;
}
public void print(int[] values) {
System.out.println(prepareResult(values));
}
如果需要String中的输出,则调用“prepareResult”方法。
答案 1 :(得分:1)
基本上我同意那些实际上说你的设计应该改变而且“其他类”应该只准备结果并将其返回的人。
但如果这个“其他班级”不在你的控制范围内,我会建议你以下。
如果您不熟悉API,可以使用以下提示来帮助您实现它。
public class FilterOutputStream extends OutputStream {
private OutputStream payload;
public FilterOutputStream(OutputStream payload) {
this.payload = payload;
}
public void write(int b) throws IOException {
if (isSpecialClass()) {
specialWrite(b);
} else {
payload.write(b);
}
}
public void flush() throws IOException {
payload.flush();
}
public void close() throws IOException {
payload.close();
}
public boolean isSpecialClass() {
return "MySpecialClass".equals(new Throwable().getStackTrace()[0].getClassName());
}
}
我没有尝试这段代码,所以它可能包含甚至语法错误,但它说明了一般的想法。我希望这有帮助。
答案 2 :(得分:0)
您可以使用System.setOut()和System.setErr()在不同的流上重定向标准输出(然后将该流传输到您的输入)。