【问题标题】:How Can I Pipe the Java Console Output to File Without Java Web Start?如何在没有 Java Web Start 的情况下将 Java 控制台输出通过管道传输到文件?
【发布时间】:2013-09-07 03:01:35
【问题描述】:

我想将 Java 控制台输出(由 System.out.println 及其同类生成)通过管道传输到文件中。我找到了一个很好的解决方案 here 来启用 Java 跟踪,但这对我不起作用(在 Mac OS X 或 Windows 上的任何位置都没有显示日志文件)。据我所知,这是因为我使用的是没有 Java Web 启动的普通 Java 应用程序。那么如何使用不使用 Java web start 的 Java 代码来做到这一点呢?理想情况下,我想要一个不需要修改代码的解决方案。

【问题讨论】:

  • 有什么方法可以在不修改代码的情况下做到这一点?我想为已经编译的应用程序这样做,而不必重新编译它。

标签: java


【解决方案1】:

如果你从命令行启动它,那么你可以使用重定向 stdout 和 stderr 到文件中,如下所示:

java -jar application.jar >file.txt  2>&1

您必须将 application.jar 替换为应用程序的 jar 文件。

【讨论】:

  • 谢谢。但是:为什么在标准错误中?!我希望已经有足够多的人对此进行投诉..
【解决方案2】:

您不需要 Java web start 来执行任何这些操作。只需将System.out 设置为FileOutputStream

System.setOut(new PrintStream(new FileOutputStream(fileName)));

其中fileName 是您要通过管道传输到的文件的完整路径。

public static void main(String[] args) throws Exception {
    System.setOut(new PrintStream(new FileOutputStream("home.txt")));
    System.out.println("hello");
}

这会将hello\n 写入当前工作目录中名为home.txt 的文件中。

如果您无法修改代码,请在 Windows 7 上使用 command redirection

java YourMainClass > home.txt

如果需要运行jar,可以使用java application launcher-jar选项。

java -jar /your/path.jar > /output/file/path.txt

【讨论】:

    【解决方案3】:

    有什么方法可以在不修改代码的情况下做到这一点?我想为已经编译的应用程序这样做。

    如果您想在不更改代码的情况下这样做,那么您最好的选择是:

    $ java com.example.MyMainClass > filename
    

    【讨论】:

    • 在终端的 Mac OS X 上尝试了 $ java /Applications/Test.app > ~/Desktop/Test.txt,但得到“错误:无法找到或加载主类 .Applications.Test.app”
    • @Thunderforge - 这是因为您必须提供类名而不是路径名。提示:类名中没有斜杠。如果这让您感到困惑,请花时间阅读java 命令的手册条目。
    • 最好我能从两年半前的想法中看出,some.pkg.App 是 OS X 应用程序的名称(扩展名为 .app,相当于到 Windows .exe)。由于我正在运行一个打包为 Mac OS X 应用程序的 Java 应用程序,这就是我尝试过的。我已经澄清了您的示例以消除这种混淆。
    【解决方案4】:

    如果您想在后台运行问题,请执行此操作 -

    nohup java -jar yourprogram.jar > log.txt 2>&1 &
    

    【讨论】:

      猜你喜欢
      • 2010-10-12
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      相关资源
      最近更新 更多