6

我有一个 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。

谁能告诉我如何做到这一点。

谢谢

4

2 回答 2

5

使用以下方法解决

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

OutputStream output = response.getOutputStream();

ByteStreams.copy(inputStream, output);

output.flush();
于 2012-02-21T12:10:50.757 回答
0

需要写一个包含在jar中的文件。

这是不可能的。您基本上需要获取 JAR 文件的绝对磁盘文件系统路径,使用JarInputStream(JAR 基本上是一个 ZIP 文件,它遵循特定的文件夹结构并得到 Java 的特殊处理),在提取文件夹结构,然后使用JarOutputStream. ClassLoader如果您稍后在运行时需要更改的 JAR 内容,您可能需要使用(自定义)重新加载它。

然而,这非常复杂并且没有任何意义。作为一种完全不同的选择,不要尝试更改 JAR,而只是将数据存储在其他地方,例如磁盘文件系统上的固定位置,或数据库中,或作为用户/系统首选项等。选择哪种方式取决于从问题中不清楚的具体功能要求。

于 2012-01-27T16:23:51.777 回答