Как установить выходной поток Java - PullRequest
1 голос
/ 27 февраля 2012

Я имею в виду, если мне нужно создать какой-то метод: void setOutputStream(PrintStream stream). Таким образом, переменная stream является выходным потоком, в который я буду записывать свои данные (желательно, чтобы это была переменная String). Вопрос в том, как он будет динамически определять выходной поток и правильно записывать мои данные в него, то есть для System.out он будет печатать данные на экране, а для файлового потока он будет записывать мои данные в файл.

Ответы [ 4 ]

4 голосов
/ 27 февраля 2012

Я думаю, что вы ищете java.lang.System # setOut (поток PrintStream) метод.Что по сути позволяет программно переназначить стандартный поток вывода .

1 голос
/ 27 февраля 2012

То, что вы хотите сделать, называется Decorator pattern. Возможно, вы захотите просмотреть этот ответ (и ветку).

Посмотрите на следующую иерархию классов (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) 

Удачи!

0 голосов
/ 27 февраля 2012

Я думаю, что в вашем вопросе что-то не так, дело в том, что сам PrintStream использует OutputStream, который передается ему при его создании, как вы можете видеть здесь .Таким образом, вы должны передать правильный PrintStream в методе, который записывается в ваш OutputStream.Я думаю, что вам просто нужно сделать метод, такой как:

PrintStream createPrintStream (OutputStream out, тип String (или что вы хотите));

и затем передать возвращенный поток печати в методкоторый будет писать на нем.

Может быть, вам поможет шаблон проектирования фабрики Шаблон проектирования фабрики

0 голосов
/ 27 февраля 2012

Вы можете создать базовый OutputStream, который записывает в файл, используя:

OutputStream out = new FileOutputStream(filename)

Затем вы можете создать PrintStream из этого, используя:

PrintStream stream = new PrintStream(out)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...