Я имею в виду, если мне нужно создать какой-то метод: void setOutputStream(PrintStream stream)
. Таким образом, переменная stream
— это выходной поток, в который я буду записывать свои данные (предпочтительно это будет переменная String
). Вопрос в том, как он будет динамически определять выходной поток и корректно записывать туда мои данные, т.е. для System.out будет печатать данные на экране, для файлового потока будет записывать мои данные в файл.
Как установить выходной поток Java
Ответы (4)
Я думаю, вы ищете java.lang.System#setOut(поток PrintStream). Что, по сути, позволяет программно переназначить поток стандартного вывода.
То, что вам нужно сделать, называется шаблоном Decorator. Возможно, вы захотите просмотреть этот ответ (и ветку).
Посмотрите на следующую иерархию классов (java.io.*Stream)
java.lang.Object
java.io.Console (implements java.io.Flushable)
java.io.File (implements java.lang.Comparable<T>, java.io.Serializable)
java.io.FileDescriptor
java.io.InputStream (implements java.io.Closeable)
java.io.ByteArrayInputStream
java.io.FileInputStream
java.io.FilterInputStream
java.io.BufferedInputStream
java.io.DataInputStream (implements java.io.DataInput)
Удачи!
Вы можете создать базовый OutputStream
, который записывает в файл, используя:
OutputStream out = new FileOutputStream(filename)
Затем вы можете создать PrintStream
из этого, используя:
PrintStream stream = new PrintStream(out)
System.out
, это объект PrintStream
.
- person Florent Guillaume; 27.02.2012
Я думаю, что что-то не так в вашем вопросе, дело в том, что сам PrintStream использует OutputStream, который передается ему при его создании, как вы можете видеть здесь. Таким образом, вы должны передать правильный PrintStream в метод, который записывается в ваш OutputStream. Я думаю, что вам просто нужно сделать такой метод, как:
PrintStream createPrintStream (OutputStream out, тип String (или что вы хотите));
а затем передайте возвращенный поток печати методу, который будет писать на нем.
Возможно, вам поможет шаблон проектирования Factory Method.