2012-01-27 38 views
6

我有一个HttpServletResponse对象,需要写入一个包含在jar中的文件。以下代码段不适用于我。HttpServletResponse PrintWriter写入InputStream

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

对不起,需要读取一个文件,是罐子,一个资源文件内解决。 – user815809 2012-01-29 22:15:47

回答

4

使用以下

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

OutputStream output = response.getOutputStream(); 

ByteStreams.copy(inputStream, output); 

output.flush(); 
0

需要编写包含在JAR文件中。

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

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

+0

对不起,需要读取jar文件中的一个资源文件。 – user815809 2012-01-29 22:14:58

+0

如果你只需要读*它(不写它!),只需使用'ClassLoader#getResourseAsStream()'通常的方法。 – BalusC 2012-01-29 22:21:00

相关问题