如何在没有Java Web Start的情况下将Java控制台输出传递给文件?

时间:2013-09-07 03:01:36

标签: java

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

4 个答案:

答案 0 :(得分:17)

您不需要Java Web Start来执行任何此操作。只需将System.out设置为FileOutputStream

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

其中fileName是您要传递给的文件的完整路径。

public static void main(String[] args) throws Exception {   //Read user input into the array
    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

答案 1 :(得分:17)

如果从命令行启动它,则可以按如下方式将stdout和stderr重定向到文件中:

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

您必须使用应用程序的jar文件替换 application.jar

答案 2 :(得分:1)

  

有没有办法在不修改代码的情况下做到这一点?我想为已编译的应用程序执行此操作。

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

$ java com.example.MyMainClass > filename

答案 3 :(得分:0)

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

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