关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。
上个月关门了。
改进这个问题
因此,我有以下代码捕获 System.out.println()
打印到控制台的方法之一的输出 login.printAccountsByName();
但我不能用 System.out.println()
之后。感谢您的帮助。
所以当程序进入 if
部分中,print语句不再向控制台打印任何内容。
PrintStream oldSysOut = System.out;
ByteArrayOutputStream outBuf = new ByteArrayOutputStream();
try (PrintStream sysOut = new PrintStream(outBuf, false)) {
System.setOut(sysOut);
System.setErr(sysOut);
// Logic of system.out goes here
login.printAccountsByName();
}
String output = new String(outBuf.toByteArray());
oldSysOut.close();
BufferedReader bf = new BufferedReader(new StringReader(output));
String line = null;
try {
line = bf.readLine();
if ( !line.equals("")) {
System.out.println("You own the following funds\n");
login.printAccountsByName();
System.out.print("\nEnter the name of the fund to sell: ");
String option5 = input.nextLine();
System.out.print("\nEnter the number of shares to sell or \"all\" to sell everything: ");
double sellShares = input.nextDouble();
login.sellShares(option5, sellShares);
System.out.println("You own the following funds\n");
login.printAccountsByName();
System.out.println("Your current cash balance is $" + login.getCash());
}
1条答案
按热度按时间wn9m85ua1#
在您的代码中,您将默认的system.out printstream更改为另一个,这是您创建的,请参见:
但是您的新printstream正在写入outuf,而outuf没有连接到控制台。这就是为什么您没有看到稍后触发的system.out.println调用的任何结果的原因之一。您可以将bytearrayoutputstream连接到另一个输出流,例如带有outbuf.writeto(…)的fileoutputstream;
另一个原因是try with resource语句关闭了打印流:
在这个try块的末尾,sysout的close方法被自动触发,并且您的sysout流被关闭,不再打开进行写入。