如何将控制台输出写入 txt 文件

2022-08-31 14:05:51

我尝试使用此代码建议(http://www.daniweb.com/forums/thread23883.html#)将控制台输出写入txt文件,但是我没有成功。怎么了?

try {
      //create a buffered reader that connects to the console, we use it so we can read lines
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

      //read a line from the console
      String lineFromInput = in.readLine();

      //create an print writer for writing to a file
      PrintWriter out = new PrintWriter(new FileWriter("output.txt"));

      //output to the file a line
      out.println(lineFromInput);

      //close the file (VERY IMPORTANT!)
      out.close();
   }
      catch(IOException e1) {
        System.out.println("Error during reading/writing");
   }

答案 1

您需要执行如下操作:

PrintStream out = new PrintStream(new FileOutputStream("output.txt"));
System.setOut(out);

第二种说法是关键。它将假定的“final”属性的值更改为提供的 PrintStream 值。System.out

有类似的方法( 和 ) 来更改标准输入和错误流;有关详细信息,请参阅 javadocs。setInsetErrjava.lang.System

以上内容的更一般版本是这样的:

PrintStream out = new PrintStream(
        new FileOutputStream("output.txt", append), autoFlush);
System.setOut(out);

如果是 ,则流将追加到现有文件,而不是截断它。如果是 ,则每当写入字节数组、调用其中一个方法或写入 a 时,输出缓冲区将被刷新。appendtrueautoflushtrueprintln\n


我只想补充一点,通常使用Log4jLogback或标准Java java.util.logging子系统等日志记录子系统是一个更好的主意。它们通过运行时配置文件提供细粒度的日志记录控制,支持滚动日志文件,馈送到系统日志记录等。

或者,如果您不是“日志记录”,请考虑以下事项:

  • 使用典型的shell,您可以将标准输出(或标准错误)重定向到命令行上的文件;例如:

    $ java MyApp > output.txt   
    

    有关详细信息,请参阅 shell 教程或手动输入。

  • 您可以将应用程序更改为使用作为方法参数传递的流,或者通过单例或依赖项注入传递,而不是写入 。outSystem.out

更改可能会对 JVM 中的其他代码造成令人讨厌的意外,而这些代码并未预料到会发生这种情况。(设计正确的 Java 库将避免依赖 和 ,但您可能很不幸。System.outSystem.outSystem.err


答案 2

无需编写任何代码,只需在控制台上的cmd中即可编写:

javac myFile.java
java ClassName > a.txt

输出数据存储在 a.txt 文件中。


推荐