java - 写入控制台和文本文件

标签 java file-io console fileoutputstream printstream

我从互联网上找到了下面的代码,它可以工作,但它不会将打印的控制台写入 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/

相关文章:

Grails:如何在 cmd 控制台中打印?

java - 从 IntelliJ 2019 中运行 Maven 命令( "Lifecycle"目标除外)

java - HtmlUnit - 获取更新的页面?

java - 运行java参数化类给出错误

java - 计算 0 的阶乘导致 NoSuchElementException

linux - 如何在shell脚本生成的文件顶部写标题

java - 父类(super class)上 protected 数组的值意外更改

c++ - 如何在 C++ 中将整个文件读入 std::string?

objective-c - 在 Objective-C 中如何判断一个目录是否可写?

c - 如何将数字读入 "subnumbers"?