10

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

4

4 回答 4

22

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

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

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

于 2013-09-07T03:24:06.040 回答
16

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

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 上使用命令重定向

java YourMainClass > home.txt

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

java -jar /your/path.jar > /output/file/path.txt
于 2013-09-07T03:09:11.297 回答
1

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

如果您想在不更改代码的情况下执行此操作,那么您最好的选择是:

$ java com.example.MyMainClass > filename
于 2013-09-07T03:13:50.477 回答
0

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

nohup java -jar yourprogram.jar > log.txt 2>&1 &
于 2018-07-07T18:27:55.567 回答