我从互联网上找到了下面的代码,它可以工作,但它不会将打印的控制台写入 omt.txt,它只会在第二个 catch block 之后写入 System.out.println
语句。如果您运行代码一次,您就会明白我的意思。我只想将控制台上的内容写入“omt.txt”文件,这就是全部...
经过一些回答后,我发现我的问题并不清楚,对此深表歉意。 我想将控制台输出保存到 omt.txt 文本文件。如果在控制台上打印“Hello 123”,它也应该在 omt.txt 文件中。换句话说,无论在控制台上打印什么,都应该同时写入 om.txt 文件,或者可以在控制台执行之后,但应该是1对1一样!
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class Wrt_file {
public static void main(String[] args) {
System.out.println("THIS is what I see on the console. but not on TEXT file");
File f = new File("omt.txt");
if(!f.exists())
{
try {
f.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
}
try {
FileOutputStream fos = new FileOutputStream(f);
PrintStream ps = new PrintStream(fos);
System.setOut(ps);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("THIS is what I see on the text file, but not on CONSOLE");
for (int i=0; i<10; i++){
System.out.println("Testing");
}
}
}
最佳答案
得知 OP 想要复制流后更新了答案
因为您想在两个流中写入数据,请尝试使用 TeeOutputStream
来自 Apache Commons .第二次尝试更改您的代码
try {
FileOutputStream fos = new FileOutputStream(f);
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
try {
fos.flush();
}
catch (Throwable t) {
// Ignore
}
}, "Shutdown hook Thread flushing " + f));
//we will want to print in standard "System.out" and in "file"
TeeOutputStream myOut=new TeeOutputStream(System.out, fos);
PrintStream ps = new PrintStream(myOut, true); //true - auto-flush after println
System.setOut(ps);
} catch (Exception e) {
e.printStackTrace();
}
现在 System.out
的结果也将放在您的文件中。
关于java - 写入控制台和文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16237546/