Печать в систему и в PrintWriter

У меня есть чуть более 100 строк данных и статистики, которые мне нужно распечатать. Я использую:

PrintWriter p = new PrintWriter(fileName);

Причина, по которой это около 100 строк, заключается в том, что мне нужно печатать как в Систему, так и в файл (около 50 строк в каждом). Есть ли более короткий способ распечатать и «украсить» мой код?

System.out.println("Prints Stats"); //To System
p.println("Prints Stats"); //To File
etc

Для каждой строки, напечатанной в Системе, есть точно такая же строка, которая напечатана в файле. Есть ли способ объединить два или сделать его короче? Или я просто застрял с этой «уродливой», длинной кучей отпечатков?


person MrAwesome8    schedule 17.11.2014    source источник
comment
Возможный дубликат: Запись в консоль и текстовый файл   -  person Pshemo    schedule 17.11.2014
comment
Вы можете использовать регистратор. ..   -  person Mena    schedule 17.11.2014
comment
Все отлично работает, пшемо, я просто хочу найти способ сделать это кратким.   -  person MrAwesome8    schedule 17.11.2014
comment
Я знаю. Принятый ответ показывает один из способов настроить ваш код, чтобы вы могли просто использовать System.out.println и распечатать его в консоли и в файле (так что вам не понадобятся дополнительные строки, которые будут вызывать p.println).   -  person Pshemo    schedule 17.11.2014
comment
Хорошо, спасибо, у меня сработало. Теперь, когда я это сделал, есть ли способ печатать только на консоли?   -  person MrAwesome8    schedule 17.11.2014


Ответы (1)


Есть несколько способов сделать это.

Использование StringBuilder

Если вы не пишете тонны текста, вы можете использовать StringBuilder для создания своего вывода, добавляя к нему, вставляя в него что-то и т. Д., А когда он будет готов, распечатайте его как в p, так и в System.out.

StringBuilder b = new StringBuilder();
b.append("Name: ").append("Susan").append("\n");
// Append more stuff to b, also insert and delete from it if you want.
System.out.print(b);
p.print(b);

Написание собственного println()

Если вы используете только метод println(), вы можете написать свой собственный метод, который вызывает его для обоих авторов:

private void println( String s ) {
    System.out.println(s);
    p.out.println(s);
}

То есть, если предположить, что p — это поле, а не локальная переменная.

Использование формата

Вместо использования println() вы можете использовать методы printf() или format(). Первый параметр — это строка форматирования, и вы можете отформатировать несколько строк в одном отпечатке, используя строку формата. Например:

System.out.printf( "Name: %s%nSurname: %s%nAge: %d%n", "Susan", "Carter", 30 );

Будет печатать

Name: Susan
Surname: Carter
Age: 30

И, используя одну и ту же строку формата, вы можете использовать два printf, чтобы сэкономить на многих println:

String formatString = "Name: %s%nSurname: %s%nAge: %d%n";
Object[] arguments = { "Susan", "Carter", 30 );

p.printf( formatString, arguments );
System.out.printf( formatString, arguments );

Это напечатает приведенный выше трехстрочный вывод в ваш файл, а затем в вывод вашей системы.

person RealSkeptic    schedule 17.11.2014
comment
Спасибо, я написал свой собственный метод печати (названный им printlnf), таким образом, он может очищать большую часть кода наиболее удобным для меня способом, а также учитывает мою потребность в использовании вывода консоли, который не направляется в файл. . Спасибо! - person MrAwesome8; 17.11.2014