0
複数のテキストファイルのZIP化
初めて質問させていただきます。
JDK 1.5.0_15
Tomcat 5.5
現在、サーブレットで、以下のようなWEBアプリを作成中です。
? 画面で[データダウンロード]ボタンをクリック
? Oracle内の複数のテーブルを順に検索
? 取得したデータをテーブルごとにCSVファイルとして出力し、さらに、それらの複数のCSVファイルを1つのZIPファイルとしてダウンロードさせる
ただし、CSVもZIPファイルも一時ファイルなどを作成せず、サーバーのResponseとしてZIPファイルを生成し、そのZIPに各CSVを格納していく、というものです。
いろいろ試した結果、一時ファイルなどを使わずに、1つの
ZIPファイルに複数のCSVを含めることは出来たのですが、
ダウンロードされたZIPファイルを展開してCSVファイルの内容を
確認すると、レコード数が不足または全くない、という
状態になってしまいます。
CSV単体の生成→ダウンロードで検証したところ、その場合
にはCSVファイルの内容は正しくなっておりますので、クエリ文
などの問題ではありません。
以下にソース(抜粋)を掲載いたします。
(略)
// テーブル名リスト
ArrayList<String> tableList;
// 検索結果を格納
ArrayList<String> result;
(略)
・
・
ZipOutputStream objZos
= new ZipOutputStream(response.getOutputStream());
try {
// ContentTypeを設定
response.setContentType"application/zip; charset=Shift_JIS");response.setHeader( "Content-Disposition"," attachment;filename=\"data.zip\"");
ByteArrayOutputStream objBos = null;
OutputStreamWriter objOsw = null;
for (Iterator<String> itr = tableList.iterator(); itr.hasNext();) {
objBos = new ByteArrayOutputStream();
objOsw = new OutputStreamWriter(objBos, "Shift_JIS");
# (略)
# テーブルごとに検索し、
# resultに格納する処理
# (略)
for (int i = 0; i < result.size(); i++) {
lineData = result.get(i);
objOsw.write(lineData.toString() + "\n");
}
ZipEntry objZe = new ZipEntry(fileName + ".csv");
objZe.setMethod(ZipOutputStream.DEFLATED);
objZos.putNextEntry(objZe);
byte[] aryByt = objBos.toByteArray();
objZos.write(aryByt, 0, aryByt.length);
}
objZos.closeEntry();
objOsw.close();
objBos.close();
objZos.close();
} catch (Exception e){
・
・
(略)
というようなソースですが、ZIP内のCSVには、本来の95%程度の行数しかないか、もしくは0行となってしまいます。
拙いプログラムしか書けない未熟者ですがよろしくお願いいたします。。