6 Stimmen

HttpServletResponse PrintWriter zum Schreiben eines InputStreams

Ich habe ein HttpServletResponse-Objekt und müssen eine Datei in der Jar enthalten zu schreiben. Die folgenden Codesegmente funktionieren nicht für mich.

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);
}

Ich weiß, dass dies funktionieren wird

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

aber ich kann den PrintWriter out.write nicht dazu bringen, den inputStream zu schreiben.

Kann mir jemand sagen, wie man das machen kann?

Danke

5voto

user815809 Punkte 341

Wird wie folgt gelöst

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

OutputStream output = response.getOutputStream();

ByteStreams.copy(inputStream, output);

output.flush();

0voto

BalusC Punkte 1034465

eine im jar enthaltene Datei schreiben müssen.

Das ist auf diese Weise nicht möglich. Sie müssten einen absoluten Dateisystempfad zu der JAR-Datei ermitteln und sie mit JarInputStream (ein JAR ist im Grunde eine ZIP-Datei, die einer bestimmten Ordnerstruktur folgt und von Java besonders behandelt wird), bearbeiten Sie die Datei in der extrahierten Ordnerstruktur und verpacken Sie sie dann erneut mit JarOutputStream . Möglicherweise müssen Sie sie anschließend mit einem (benutzerdefinierten) ClassLoader wenn Sie die geänderten JAR-Inhalte später zur Laufzeit benötigen.

Dies ist jedoch ziemlich kompliziert und macht keinen Sinn. Eine völlig andere Alternative ist, nicht zu versuchen, das JAR zu ändern, sondern die Daten einfach woanders zu speichern, z. B. an einem festen Ort im Dateisystem, in einer Datenbank oder als Benutzer-/Systemeinstellung usw. Welcher Weg zu wählen ist, hängt von der konkreten funktionalen Anforderung ab, die aus der Frage nicht klar hervorgeht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X