我有一个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。
有谁能告诉我这是怎么做的。
由于
答案 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,而只是将数据存储在其他位置,例如在磁盘文件系统上的固定位置,或在数据库中,或作为用户/系统首选项等。选择哪种方式取决于具体的功能要求,问题不明确。