• 締切済み

ファイル圧縮について

こんにちわ。質問内容ですが、Javaでファイルの圧縮処理を作成しているのですが、変な動きをしてしまいます。 普通に実行をすると、zipファイルは作成されるのですが、圧縮もとのファイルがzipファイルの中に入っておらず、 空のzipファイルが出来てしまいます。 コマンドプロンプトで実行すると、うまく圧縮されています。 又、コマンドプロンプトで1度実行したファイルで普通に実行かけると、 きちんと圧縮されるようになります。 文章が下手で伝わりにくいかと思いますが 、一応私の作成したソースを載せます。 申し訳ありませんがみなさんのお力を貸してください<m(__)m> 環境 WindowsXP  Tomcat5.0  j2sdk1.4.2_02  struts1.1 apache-ant-1.5.3-1

みんなの回答

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.2

探偵コナンのように推理すると… (1)「実行方法A」で実行すると、zipファイルは作成されるものの、 空のzipファイルができる(=圧縮がうまくいっていない) (2)「実行方法B」で実行すると、うまく圧縮される (3)Bの直後にAを行うと、うまく圧縮される うーん、つまり答えはずばり 「単にAがダメなだけ」 ないんじゃないの? (引数の指定方法とか) そのへん(自分の開発環境)をもう一度見直してみよう! --- <おまけ> 上記(3)のパターンはうまくいった、とのことだけど、 じゃあたとえば、 「コマンドプロンプト」による実行をして、きちんとした圧縮ファイルを生成させたあと、 その「生成された圧縮ファイル」を一度ごみ箱に捨てて、 それから 「普通の実行」をしてみたら、どうなる? 今度は「うまくいかない」んじゃないかな?

illusion_cat
質問者

お礼

回答ありがとうございます。 (3)の場合なんですが、生成された圧縮ファイルを削除しても、うまく圧縮されます。 又、昨日圧縮がうまく出来なかったのに、次の日はうまくできた。(ソースは変更していない)というこあとがあります。 開発環境になにか問題があるのかなと思ったりもしますが、原因が定かではありません・・・・ 出来ないならできない、出来るなら出来るではっきりした動作ならわかりやすいのですが。すごく不安定なため、四苦八苦しています。。。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

>一応私の作成したソースを載せます。 ソースを載せてください。

illusion_cat
質問者

補足

すみません。載せるといっておいて、字数がオーバーしてしまい、載せられませんでした・・・ package study.struts.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.BufferedInputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.zip.ZipException; /** 単独のファイルを zip形式にファイルを圧縮する SimpleZip */ public class SimpleZip { /** ファイルの読み込みの終わりを表す定数 */ protected static final int EOF = -1; /** Zip形式のファイル(ZipFileのクラスではない) */ protected static File zf; /** 最初に呼び出される処理 */ public static void Compression( String inFile ) { try { File file = new File( inFile ); zf = new File(inFile + ".zip" ); compressFile( file ); } catch( FileNotFoundException e ){ System.out.println( "file not found" ); } catch( ZipException e ){ System.out.println( "Zip error..." ); } catch( IOException e ){ System.out.println( "IO error..." ); } } /** 与えられたファイルを圧縮する */ public static void compressFile( File file ) throws FileNotFoundException,ZipException,IOException { try { FileInputStream fis = new FileInputStream( file ); BufferedInputStream bis = new BufferedInputStream( fis ); FileOutputStream fos = new FileOutputStream( zf ); ZipOutputStream zos = new ZipOutputStream( fos ); ZipEntry target = new ZipEntry( file.getPath() ); zos.putNextEntry( target ); /* バッファリングは自動的に行われるので、ここで指定している バッファサイズは、特別に意味は持たない */ byte buf[] = new byte[1024]; int count; while( ( count = bis.read( buf, 0, 1024 ) ) != EOF ) { zos.write( buf, 0, count ); } bis.close(); // fis より先にクローズすること fis.close(); zos.closeEntry(); zos.close(); // fos より先にクローズすること fos.close(); } catch( FileNotFoundException e ){ throw e; } catch( ZipException e ){ throw e; } catch( IOException e ){ throw e; } } }

関連するQ&A

専門家に質問してみよう