如何将PrintWriter转换为String或写入文件?

时间:2012-02-10 11:06:51

标签: java jsp servlets printwriter

我正在使用JSP生成动态页面,我希望将此动态生成的完整页面保存为文件存档。

在JSP中,所有内容都写入PrintWriter out = response.getWriter();

在页面的末尾,在向客户端发送响应之前,我想将此页面保存在文件或缓冲区中作为字符串以供日后处理。

如何保存Printwriter内容或转换为String

7 个答案:

答案 0 :(得分:17)

要从NOT IN (SELECT的输出中获取字符串,您可以通过构造函数将FROM 传递给)) ORDER BY

.

答案 1 :(得分:9)

为什么不使用StringWriter呢?我认为这应该能够满足您的需求。

例如:

StringWriter strOut = new StringWriter();
...
String output = strOut.toString();
System.out.println(output);

答案 2 :(得分:5)

它取决于:如何构造然后使用PrintWriter。

如果将PrintWriter构造为1st,然后传递给写入它的代码,则可以使用Decorator模式,该模式允许您创建Writer的子类,将PrintWriter作为委托,并将调用转发给委托,但也保留了您可以存档的内容的副本。

public class DecoratedWriter extends Writer
{
   private final Writer delegate;

   private final StringWriter archive = new StringWriter();

   //pass in the original PrintWriter here
   public DecoratedWriter( Writer delegate )
   {
      this.delegate = delegate;
   }

   public String getForArchive()
   { 
      return this.archive.toString();
   } 

   public void write( char[] cbuf, int off, int len ) throws IOException
   {
      this.delegate.write( cbuf, off, len );
      this.archive.write( cbuf, off, len );
   }

   public void flush() throws IOException
   {
      this.delegate.flush();
      this.archive.flush();

   } 

   public void close() throws IOException
   {
      this.delegate.close();
      this.archive.close();
   }
}

答案 3 :(得分:1)

仅使用PrintWriter对象无法获取它。它会刷新数据,并且不会保留任何内容。这不是你应该看到的用于获取整个字符串的对象,

答案 4 :(得分:0)

我认为最好的方法是在其他对象(如StringBuffer)中准备响应,并将其内容发送到响应,并将存储在该变量中的内容保存到文件中。

答案 5 :(得分:0)

与cdc正在做的事情类似 - 您可以扩展PrintWriter,然后创建并传递这个新类的实例。

调用getArchive()以获取通过编写者传递的数据的副本。

public class ArchiveWriter extends PrintWriter {
    private StringBuilder data = new StringBuilder();

    public ArchiveWriter(Writer out) {
        super(out);
    }

    public ArchiveWriter(Writer out, boolean autoFlush) {
        super(out, autoFlush);
    }

    public ArchiveWriter(OutputStream out) {
        super(out);
    }

    public ArchiveWriter(OutputStream out, boolean autoFlush) {
        super(out, autoFlush);
    }

    public ArchiveWriter(String fileName) throws FileNotFoundException {
        super(fileName);
    }

    public ArchiveWriter(String fileName, String csn) throws FileNotFoundException, UnsupportedEncodingException {
        super(fileName, csn);
    }

    public ArchiveWriter(File file) throws FileNotFoundException {
        super(file);
    }

    public ArchiveWriter(File file, String csn) throws FileNotFoundException, UnsupportedEncodingException {
        super(file, csn);
    }

    @Override
    public void write(char[] cbuf, int off, int len) {
        super.write(cbuf, off,len);
        data.append(cbuf, off, len);
    }

    @Override
    public void write(String s, int off, int len) {
        super.write(s, off,len);
        data.append(s, off, len);
    }

    public String getArchive() {
        return data.toString();
    }
}

答案 6 :(得分:-1)

这有助于我:获取一个SOAP-able对象作为XML字符串。

JAXBContext jc = JAXBContext.newInstance(o.getClass());
Marshaller m = jc.createMarshaller();
StringWriter writer = new StringWriter();
m.marshal( o, new PrintWriter(writer) );
return writer.toString();