2012-02-27 4 views
1

メソッドを作成する必要がある場合は、何らかの種類の:void setOutputStream(PrintStream stream)を作成する必要があります。 stream変数は、データを書き込む出力ストリーム(好ましくはString変数)です。 質問は、出力ストリームを動的に決定し、そこにデータを正しく書き込む方法です。つまり、System.outの場合は画面にデータを出力し、ファイルストリームの場合はデータをファイルに書き込みます。あなたが使用してファイルに書き込み、その基本的なOutputStreamを作成することができます出力ストリームを設定する方法Java

答えて

4

私はあなたがjava.lang.System#setOut(PrintStream stream)メソッドを探していると思います。基本的に標準出力ストリームをプログラムで再割り当てすることができます。

+1

私はそれが私の必要なものだと思います。ありがとう! – Helgus

0

PrintStream stream = new PrintStream(out) 
+0

を助けることができると私は私の機能は、画面上にそれを印刷したい場合は?どのように "動的に"それを行うには? – Helgus

+0

私は "動的"な部分を理解していません。画面に印刷したいなら、 'System.out'を使います。これは' PrintStream'オブジェクトです。 –

1

Decoratorパターン何をしたいと呼ばれた:

OutputStream out = new FileOutputStream(filename) 

をあなたはその後、使用しているからPrintStreamを作成することができます。 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) 

グッドラック!

+0

File ioのみを記述していますが、別の実装方法が必要です – Helgus

+0

アイデアはすべてのjava.io. *ストリームで同じですが、階層全体がデコレータパターンを実装しています。 – aviad

0

あなたの質問に何か間違っていると思います。ポイントは、PrintStream自体が、作成時に渡されるOutputStreamを使用しています。hereが表示されています。 OutputStreamに書き込むメソッドで正しいPrintStreamを渡す必要があります。私は、あなたはちょうどのようなメソッドを行う必要があると思う:

PrintStream createPrintStream(OutputStream out、String(またはあなたが望むもの)タイプ);

を返します。次に、返されたプリントストリームを、書き込むメソッドに渡します。

たぶん、工場出荷時のデザインパターンは、あなたにFactory Method Design Pattern

関連する問題