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

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

在页面的末尾,在向客户端发送响应之前,我想要保存此页面,无论是在文件中还是在缓冲区中作为字符串,以便以后处理。

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

请检查以下问题的答案。stackoverflow.com/questions/2010990/

谢谢Raj,但这不是我要找的,客户端会看到正常的html,但在服务器端,脚本将创建本地副本并写入文件。

可能重复如何从Java Web服务器记录响应内容

要从PrintWriter的输出中获取字符串,可以通过构造函数将StringWriter传递给PrintWriter:

@Test

public void writerTest(){

StringWriter out = new StringWriter();

PrintWriter writer = new PrintWriter(out);

// use writer, e.g.:

writer.print("ABC");

writer.print("DEF");

writer.flush(); // flush is really optional here, as Writer calls the empty StringWriter.flush

String result = out.toString();

assertEquals("ABCDEF", result);

}

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

例如:

StringWriter strOut = new StringWriter();

...

String output = strOut.toString();

System.out.println(output);

它取决于:如何构造然后使用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();

}

}

Java:永远不会失去一个为(几乎)没有写36行的好机会!

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

感谢Navneeth Gopalakrishnan,如果我不能使用Printwriter,那么我有什么选择? 响应对象怎么样? 因为一切都是通过对客户的回应!

您可以将要写入的内容写入StringWriter,最后在完成所有操作后,您也可以将其写入响应式编写器。 通过这种方式,您可以获得已编写的数据,这些数据可用于任何其他目的。

当我的意思是写,我的意思是,将StringWriter中的内容刷新到response.getWriter()。

与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();

}

}

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

这有助于我:获取一个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();

这绝对是垃圾和废话。

这个"垃圾"或"胡说八道"怎么样? 我不明白

java printwriter 文件_关于java:如何将PrintWriter转换为String或写入文件?相关推荐

  1. java二维对象数组存入文件_关于Java:将2D数组保存到磁盘文件

    我目前正在开发一个基本的国际象棋程序,该程序允许用户保存当前游戏并稍后再返回并从上次停止的地方接机. 唯一的问题是我不知道如何将2d数组保存到磁盘文件. 我感到更加困惑的是,该代码集需要单独写入每个值 ...

  2. java文件和xml文件_用Java分割大型XML文件

    java文件和xml文件 上周,我被要求用Java编写一些东西,该东西能够将一个30GB的XML文件拆分为可配置文件大小的较小部分. 文件的使用者将是一个中间件应用程序,该应用程序在XML的大尺寸方面 ...

  3. java文件打包jar文件_把java文件打包成.jar (jar命令详解)

    把java文件打包成.jar (jar命令详解) 先打开命令提示符(win2000或在运行框里执行cmd命令,win98为DOS提示符),输入jar Chelp,然后回车(如果你盘上已经有了jdk1. ...

  4. java在客户端生成文件_用Java编写创建一对客户端/服务器程序,利用数据报将一个文件从一台主机传送到另一...

    展开全部 下面是e5a48de588b63231313335323631343130323136353331333337386564我自己写的一个读取并显示txt文件的demo,希望对您有帮助. pu ...

  5. cmd 将文件夹下文件剪切到另外一个文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇...

    本文是Java IO总结系列篇的第5篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  6. java 读取 远程文件_利用JAVA获取远程文件及使用断点续传 供学习者使用

    闲来没事,就做做,程序还是要多写才好@ 原理不说,文件方面及I/O方面,去BAIDU一下就知道,断点续传的原理也很简单,就是在原来已经下载的基础之上继续下载就可以了,用到了这么关键的一句:urlc.s ...

  7. java 流 复制文件_【Java】使用字节流复制文件

    其实用java程序复制文件并不难 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOE ...

  8. java类索引_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...

    讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...

  9. java剪切txt文件_用Java把剪切板的内容实时保存到txt

    test类:提示用户程序已启动,提示保存位置,清空剪切板. package com.ariya.service; import com.ariya.service.impl.ClipboardServ ...

最新文章

  1. PCL滤波介绍(2)
  2. vue.js - advance - render 函数小抄
  3. python中prettytable模块_Python库: PrettyTable 模块
  4. VC++ VS2010 error LNK1123 转换到 COFF 期间失败 怎么办
  5. POJ 1904 【强连通分量】.cpp
  6. c# 构造sql语句
  7. PHP的strpos函数辨析
  8. 黑客入侵3个月浑然不知,或影响3万家客户!这个软件测试公司心太大了!
  9. 笨方法学python 习题23
  10. 一二线城市都有哪些互联网公司是大家都想去的?
  11. Mysql数据库手册
  12. 抽样分布(卡方分布、t分布、F分布)
  13. 自学SpringBoot二之配置文件--yml格式配置
  14. 苹果电脑在哪里改计算机id,苹果MAC电脑如何更改ID账号
  15. HttpClient和RestTemplate
  16. dn什么意思_给排水DN与dn分别是什么
  17. 游戏测试基础:缺陷等级
  18. 通识3——1080i、1080p、2K、4K是什么意思?
  19. 使用SimpleEmail邮件发送之QQ邮箱
  20. 深圳市专精特新企业申报流程及奖励政策重点介绍,补贴20-50万

热门文章

  1. [翻译] Overleaf 常见错误
  2. SpectatorView For Hololens
  3. 高手必备!Vista的经典绝技大揭密!
  4. python turtle绘图多个实例
  5. windows update 80072ee2
  6. android lte信号强度,手机信号强度表示
  7. 计算机网络 (ISP、计算机网络体系结构 拓扑图)
  8. 发送短信验证码+登陆功能
  9. 连载《国培计划》骨干教师的研修日志之六:关于米新江教授谈的授之以渔与渔之以渔
  10. CCC3.0学习笔记_数字密钥分享