2012-01-27 13 views
6

Mam obiekt HttpServletResponse i trzeba napisać plik zawarty w słoiku. Poniższe segmenty kodu nie działają dla mnie.HttpServletResponse PrintWriter do Write 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); 
} 

wiem, że to będzie działać

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

ale nie mogę uzyskać out.write PrintWriter pisać InputStream.

Czy ktoś może mi powiedzieć, jak można to zrobić.

Dzięki

+0

przepraszam, trzeba czytać plik, który jest w słoiku, plik zasobów. – user815809

Odpowiedz

4

rozwiązać za pomocą następujących

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

OutputStream output = response.getOutputStream(); 

ByteStreams.copy(inputStream, output); 

output.flush(); 
0

trzeba zapisać plik zawarty w słoiku.

To nie jest możliwe w ten sposób. Zasadniczo trzeba uzyskać bezwzględną ścieżkę systemu plików na dysku do pliku JAR, wyodrębnić ją przy użyciu JarInputStream (JAR jest w zasadzie plikiem ZIP, który podąża za określoną strukturą folderów i uzyskać specjalne traktowanie przez Javę), edytować/dodać plik w wyodrębnioną strukturę folderów, a następnie zapakuj ją ponownie, używając JarOutputStream. Będziesz prawdopodobnie musiał ponownie załadować go za pomocą (niestandardowego) ClassLoader, jeśli potrzebujesz zmienionej zawartości JAR później podczas wykonywania.

Jest to jednak dość skomplikowane i nie ma sensu. Jako całkowicie inną alternatywę nie należy próbować zmieniać pliku JAR, a jedynie przechowywać dane w innym miejscu, np. na stałej lokalizacji w systemie plików na dysku, w bazie danych lub jako preferencje użytkownika/systemu, itp. Wybór sposobu zależy od konkretnych wymagań funkcjonalnych, które nie wynikają z pytania.

+0

Niestety, musisz odczytać plik znajdujący się w słoiku, plik zasobów. – user815809

+0

Jeśli potrzebujesz tylko * przeczytać * to (nie pisać!), Po prostu użyj 'ClassLoader # getResourseAsStream()' w zwykły sposób. – BalusC

Powiązane problemy