Вы можете использовать перенаправитель потока вывода, который поддерживается командной строкой Windows, * nix shells, например,
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 для запуска и вывод / ошибка.