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

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

您不需要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上使用命令重定向 。

 java YourMainClass > home.txt 

如果需要运行jar,可以使用java应用程序启动器的-jar选项。

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

如果从命令行启动它,则可以使用重定向stdout和stderr进入文件,如下所示:

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

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

有没有办法在不修改代码的情况下完成它? 我想为已编译的应用程序执行此操作。

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

 $ java com.example.MyMainClass > filename 

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

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