6

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

しかし、PrintWriterout.writeを取得してinputStreamを書き込むことができません。

誰かがこれを行う方法を教えてもらえますか?

ありがとう

4

2 に答える 2

5

以下を使用して解決

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

OutputStream output = response.getOutputStream();

ByteStreams.copy(inputStream, output);

output.flush();
于 2012-02-21T12:10:50.757 に答える
0

jarに含まれるファイルを書き込む必要があります。

この方法では不可能です。基本的に、JARファイルへの絶対ディスクファイルシステムパスを取得し、それを使用して抽出しJarInputStream(JARは基本的に特定のフォルダー構造に従い、Javaによる特別な処理を受けるZIPファイルです)、ファイルを編集/追加する必要があります。フォルダ構造を抽出し、を使用して再度パッケージ化しJarOutputStreamます。ClassLoader後で実行時に変更されたJARの内容が必要な場合は、後で(カスタム)を使用してリロードする必要があります。

ただし、これはかなり複雑で意味がありません。まったく別の方法として、JARを変更しようとせずに、データを別の場所に保存します。たとえば、ディスクファイルシステムの固定場所、データベース、またはユーザー/システム設定などです。どちらを選択するかは、質問から明らかではない具体的な機能要件によって異なります。

于 2012-01-27T16:23:51.777 に答える