System.out для файла в java

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

Есть ли способ перенаправить вывод приложения в файл из командной строки в java?

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

java -jar myjar.jar > output.txt 

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

System.setOut (PrintStream ps)

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

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

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

 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); } } 

Вы вызываете его с тремя дополнительными параметрами – основным classом для запуска, а также директивой output / error.

При использовании этого конструктора:

  новый PrintStream (новый BufferedOutputStream (новый FileOutputStream ("file.txt"))); 

не забудьте установить autoflushing в true, то есть:

  новый PrintStream (новый BufferedOutputStream (новый FileOutputStream ("file.txt")), true); 

иначе вы можете получить пустые файлы даже после завершения вашей программы.

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

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

Чтобы улучшить ответ «vijay.shad», я использовал приведенный ниже код, чтобы направить файл в Home Directory в Linux или MyDocuments в Windows.

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

System.out.println () используется для печати сообщений на консоли.

Система – это class, определенный в пакете java.lang. out является экземпляром PrintStream, который является публичным и статическим членом classа System. Поскольку все экземпляры classа PrintStream имеют открытый метод println ().

System.out – это статический PrintStream, который записывает на консоль. Мы можем перенаправить вывод на другой PrintStream, используя метод System.setOut (), который принимает параметр 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"); 
  • Как я могу получить содержимое ресурса из статического контекста?
  • Как зарегистрировать некоторое пространство имен URL (myapp: //app.start/) для доступа к вашей программе, вызывая URL-адрес в браузере в ОС Android?
  • Android: как приостановить и возобновить таймер обратного отсчета?
  • eclipse с Android sdk, ERROR: пространство кучи Java
  • Кросс-платформенный способ изменения приоритета Java-процесса
  • Создание приложения Android Lock Screen.
  • Перезапустите службу, даже если приложение отключено и продолжает работать в фоновом режиме даже после закрытия приложения How?
  • Как создать свою собственную библиотеку для разработки Android, которая будет использоваться в каждой написанной вами программе?
  • как динамически обновлять xml-файл из другого XML-файла?
  • READ_EXTERNAL_STORAGE разрешение для Android
  • Ошибка приложения при попытке использовать RecyclerView на Android 5.0
  • Давайте будем гением компьютера.