【问题标题】:How to Set an Output Stream Java如何设置输出流 Java
【发布时间】:2012-03-17 00:10:27
【问题描述】:

我的意思是,如果我必须创建某种方法:void setOutputStream(PrintStream stream)。 所以stream 变量是一个输出流,我将在其中写入我的数据(最好是String 变量)。 问题是,它将如何动态确定输出流并在那里正确写入我的数据,即对于 System.out,它将在屏幕上打印数据,对于文件流,它将我的数据写入文件。

【问题讨论】:

    标签: java string file stream java-io


    【解决方案1】:

    我认为您正在寻找java.lang.System#setOut(PrintStream stream) 方法。这实质上可以让您以编程方式重新分配标准输出流。

    【讨论】:

      【解决方案2】:

      您想要做的事情称为Decorator 模式。您可能想查看this 的答案(和主题)。

      看下面的类层次结构(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) 
      

      祝你好运!

      【讨论】:

      • 它只描述了文件 io,但我需要另一种实现方式
      • 这个想法对于所有 java.io.*streams 都是一样的,整个层次结构都实现了装饰器模式,这就是你需要做的。
      【解决方案3】:

      您可以创建一个基本的OutputStream,使用以下方法写入文件:

      OutputStream out = new FileOutputStream(filename)
      

      然后您可以使用以下方法创建PrintStream

      PrintStream stream = new PrintStream(out)
      

      【讨论】:

      • 如果我想让我的函数在屏幕上打印它?如何“动态地”做到这一点?
      • 我不明白“动态”部分。如果要打印到屏幕上,则使用System.out,它是一个PrintStream 对象。
      【解决方案4】:

      我认为您的问题有问题,关键是 PrintStream 本身使用了在您创建它时传递给它的 OutputStream,如您所见 here。 因此,您必须在写入 OutputStream 的方法中传递正确的 PrintStream。我认为您只需要执行以下方法:

      PrintStream createPrintStream(OutputStream out, String(或你想要的)类型);

      然后将返回的打印流传递给将在其上写入的方法。

      也许工厂设计模式可以帮到你Factory Method Design Pattern

      【讨论】:

        猜你喜欢
        • 2012-10-08
        • 2015-07-27
        • 1970-01-01
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        • 1970-01-01
        • 2017-06-09
        相关资源
        最近更新 更多