Я запускаю приложение из другого для тестирования. Я хочу перенаправить вывод для протестированного приложения в файл, таким образом, у меня может быть журнал после каждого теста.
Существует ли способ перенаправить вывод приложения в файл из командной строки в Java?
Вы можете использовать перенаправитель выходного потока, который поддерживается командной строкой 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 и направление вывода / ошибки.
Да, вы можете установить желаемый файл следующим образом.
try {
System.setOut(new PrintStream(new File("output-file.txt")));
} catch (Exception e) {
e.printStackTrace();
}
или использовать http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileWriter.html