System.out к файлу в Java
Я запускаю приложение из другого приложения для тестирования. Я хочу перенаправить вывод для тестируемого приложения в файл, чтобы иметь возможность вести журнал после каждого теста.
Есть ли способ перенаправить вывод приложения в файл из командной строки в Java?
7 ответов
Вы можете использовать перенаправитель потока вывода, который поддерживается командной строкой Windows, *nix shells, например
java -jar myjar.jar > output.txt
В качестве альтернативы, поскольку вы запускаете приложение изнутри виртуальной машины, вы можете перенаправить System.out
из самой Java. Вы можете использовать метод
Что заменяет стандартный поток вывода, поэтому все последующие вызовы 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 для запуска и выход / ошибка.
При использовании этого конструктора:
new PrintStream (новый BufferedOutputStream(новый FileOutputStream("file.txt")));
не забудьте установить для autoflushing значение true, то есть:
new PrintStream (новый BufferedOutputStream(новый FileOutputStream("file.txt")), true);
в противном случае вы можете получить пустые файлы даже после завершения вашей программы.
Да, вы можете установить желаемый файл следующим образом.
try {
System.setOut(new PrintStream(new File("output-file.txt")));
} catch (Exception e) {
e.printStackTrace();
}
System.out.println() используется для печати сообщений на консоли.
Система - это класс, определенный в пакете java.lang. out является экземпляром PrintStream, который является открытым и статическим членом класса System. Поскольку все экземпляры класса 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
Чтобы улучшить ответ "vijay.shad", я использовал приведенный ниже код, чтобы направить файл в Домашний каталог в Linux или MyDocuments в Windows.
try {
System.setOut(new PrintStream(new File(FileSystemView.getFileSystemView()
.getDefaultDirectory().toString()
+ File.separator + "output-file.txt")));
} catch (Exception e) {
e.printStackTrace();
}
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");
Или используйте http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileWriter.html