HttpServletResponse PrintWriter写一个InputStream

时间:2012-01-27 16:20:58

标签: servlets inputstream printwriter

我有一个HttpServletResponse对象,需要编写jar中包含的文件。以下代码段对我不起作用。

URI uri = <myclass>.class.getResource("/" + filename).toURI(); 
PrintWriter out = response.getWriter();
File f = new File(uri); 
FileReader bis = new FileReader(f);
char[] buff = new char[1024];
int bytesRead;
// Simple read/write loop.
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
    out.write(buff, 0, bytesRead);
}

我知道这会起作用

InputStream inputStream = <myclass>.class.getResourceAsStream("/" + filename);

但是我无法让PrintWriter out.write来编写inputStream。

有谁能告诉我这是怎么做的。

由于

2 个答案:

答案 0 :(得分:5)

使用以下

解决
InputStream inputStream = KCSSchemaController.class.getResourceAsStream("/" + schemaname);

OutputStream output = response.getOutputStream();

ByteStreams.copy(inputStream, output);

output.flush();

答案 1 :(得分:0)

  

需要编写jar中包含的文件。

这种方式不可能。您基本上需要获取JAR文件的绝对磁盘文件系统路径,使用JarInputStream提取它(JAR基本上是一个遵循特定文件夹结构的ZIP文件,并由Java获得特殊处理),编辑/在解压缩的文件夹结构中添加文件,然后使用JarOutputStream再次打包。如果稍后在运行时需要更改的JAR内容,则可能需要使用(自定义)ClassLoader重新加载它。

然而,这很复杂,毫无意义。作为一种完全不同的替代方案,不要尝试更改JAR,而只是将数据存储在其他位置,例如在磁盘文件系统上的固定位置,或在数据库中,或作为用户/系统首选项等。选择哪种方式取决于具体的功能要求,问题不明确。