2012-02-27 3 views
1

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

ответ

0

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

OutputStream out = new FileOutputStream(filename) 

Вы можете создать PrintStream от использования:

PrintStream stream = new PrintStream(out) 
+0

, и если я хочу, чтобы моя функция напечатать его на экране? как это сделать «динамично»? – Helgus

+0

Я не понимаю «динамически» часть. Если вы хотите распечатать на экране, используйте «System.out», это объект «PrintStream». –

1

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

Посмотрите на следующей иерархии классов (java.io. * Поток)

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) 

Good Luck!

+0

описывает только файл io, но мне нужен другой способ реализации. – Helgus

+0

Идея такая же для всех потоков java.io. *. Вся иерархия реализует шаблон Decorator, и это то, что вам нужно сделать. – aviad

0

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

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

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

Может быть, завод шаблон дизайна может помочь вам Factory Method Design Pattern

Смежные вопросы