2012-01-27 209 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

相關問題