System.out到java中的文件

我正在运行另一个应用程序用于testing目的。 我想将testing的应用程序的输出redirect到一个文件,所以我可以在每次testing后都有一个日志。

有没有办法将应用程序的输出redirect到java中的命令行文件?

您可以使用Windows命令行* nix shell支持的输出streamredirect器

java -jar myjar.jar > output.txt 

另外,当你从vm里运行应用程序时,你可以从java本身中redirectSystem.out 。 你可以使用这个方法

System.setOut(PrintStream ps)

它将replace标准输出stream,因此所有后续对System.out的调用将转到您指定的stream。 你可以在运行你的包装应用程序之前做到这一点,例如调用System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("output.txt"))));

如果你正在使用一个你不能修改的包装器,那么创build你自己的包装器。 所以你有FEST包装 – >streamredirect包装 – >testing的应用程序。

例如,你可以像这样实现一个简单的包装:

 public class OutputRedirector { /* args[0] - class to launch, args[1]/args[2] file to direct System.out/System.err to */ public static void main(String[] args) throws Exception { // error checking omitted for brevity System.setOut(outputFile(args(1)); System.setErr(outputFile(args(2)); Class app = Class.forName(args[0]); Method main = app.getDeclaredMethod("main", new Class[] { (new String[1]).getClass()}); String[] appArgs = new String[args.length-3]; System.arraycopy(args, 3, appArgs, 0, appArgs.length); main.invoke(null, appArgs); } protected PrintStream outputFile(String name) { return new PrintStream(new BufferedOutputStream(new FileOutputStream(name)), true); } } 

你用3个额外的参数调用它 – 要运行的主类,并输出/错误指示。

当使用这个构造函数时:

 新的PrintStream(新的BufferedOutputStream(新的FileOutputStream(“file.txt”))); 

请记住将自动刷新设置为true,即:

  new PrintStream(new BufferedOutputStream(new FileOutputStream(“file.txt”)),true); 

否则即使程序结束后也可能会得到空文件。

是的,你可以像这样设置你想要的文件。

 try { System.setOut(new PrintStream(new File("output-file.txt"))); } catch (Exception e) { e.printStackTrace(); } 

为了改进“vijay.shad”响应,我使用下面的代码将文件导向到Linux中的主目录或Windows中的MyDocuments。

  try { System.setOut(new PrintStream(new File(FileSystemView.getFileSystemView() .getDefaultDirectory().toString() + File.separator + "output-file.txt"))); } catch (Exception e) { e.printStackTrace(); } 

System.out.println()用于在控制台上打印消息。

系统是在java.lang包中定义的一个类。 out是PrintStream的一个实例,它是类System的公共和静态成员。 由于PrintStream类的所有实例都有一个公共方法println()。

System.out是写入控制台的静态PrintStream 。 我们可以使用将PrintStream作为参数的System.setOut()方法将输出redirect到不同的PrintStream。

 import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; public class SetPrintStream { public static void main(String[] args) throws FileNotFoundException{ System.out.println("Print on console"); // Store console print stream. PrintStream ps_console = System.out; File file = new File("file.txt"); FileOutputStream fos = new FileOutputStream(file); // Create new print stream for file. PrintStream ps = new PrintStream(fos); // Set file print stream. System.setOut(ps); System.out.println("Print in the file !!"); // Set console print stream. System.setOut(ps_console); System.out.println("Console again !!"); } } Output: Print on console Console again !! new file.txt will be created. 

有关更多信息,请参阅我的博客

http://javaexplorer03.blogspot.in/2016/02/how-do-i-redirect-standard-output-to.html

  File file = new File("xyz.txt"); PrintStream printStreamToFile = new PrintStream(file); System.setOut(printStreamToFile); System.out.println("Hello I am writing to File xyz.txt");