System.out в файл в Java

Я запускаю приложение из другого для тестирования. Я хочу перенаправить вывод для протестированного приложения в файл, таким образом, у меня может быть журнал после каждого теста.

Существует ли способ перенаправить вывод приложения в файл из командной строки в Java?

48
задан MikeC 10 April 2012 в 14:18
поделиться

3 ответа

Вы можете использовать перенаправитель выходного потока, который поддерживается командной строкой Windows, оболочками * nix, например

java -jar myjar.jar > output.txt

В качестве альтернативы, поскольку вы запускаете приложение из виртуальной машины, вы можете перенаправить System.out из самой java. Вы можете использовать метод

System.setOut (PrintStream ps)

, который заменяет стандартный выходной поток, поэтому все последующие вызовы System.out переходят в указанный вами поток. Вы можете сделать это перед запуском обернутого приложения, например вызов System.setOut (new PrintStream (new BufferedOutputStream (new FileOutputStream ("output.txt"))));

Если вы используете оболочку, которую вы не можете изменить, создайте свою собственную оболочку. Итак, у вас есть оболочка FEST -> оболочка перенаправителя потока -> протестированное приложение.

Например, вы можете реализовать простую оболочку, подобную этой:

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 дополнительными параметрами - запускаемый класс Main и направление вывода / ошибки.

76
ответ дан 7 November 2019 в 12:05
поделиться

Да, вы можете установить желаемый файл следующим образом.

try {
    System.setOut(new PrintStream(new File("output-file.txt")));
} catch (Exception e) {
     e.printStackTrace();
}
27
ответ дан 7 November 2019 в 12:05
поделиться
-3
ответ дан 7 November 2019 в 12:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: