• 締切済み

ファイル圧縮について

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

  • Java
  • 回答数2
  • ありがとう数2

みんなの回答

  • 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

  • org.apache.tools.zip.* を使って圧縮したZIPファイルを開くとエラーとなってしまう

    お世話になります。 開発環境は以下のとおりです。 開発ツール NetBeans IDE 6.5 JDK 1.6.0_11 OS Windows XP SP2 ant.jar version 1.7.1 はじめ、JDK付属の「java.util.zip.ZipOutputStream」,「java.util.zip.Entry」を用いて、 ZIPファイルを作成していたのですが、 日本語名のファイルを圧縮すると文字化けしてしまい、 調べてみるとJakart Ant内のant.jarの「org.apache.tools.zip.ZipOutputStream」,「org.apache.tools.zip.Entry」を使って import宣言を変えてsetEncodingしてしまえば簡単に出来るという情報がありました。 早速やってみたのですが、 1.ZIPファイルは作成される。このときファイルサイズがjava.util.zip.*を使ったときと同じ 2.LhaplusやWinRARといった解凍ツールを使って解凍するとエラーが 発生して中身がない 3.日本語が含まれないファイルを圧縮・解凍しても同じ現象 4.java.util.zip.* を使ったときは正常に圧縮・解凍できる(文字化けはしていますが・・・) といった状況になってしまいました。 ロジックを何度も見直し、ZipOutputStreamのflush、closeもしっかり行っていますし、CRC32の設定やファイルサイズの設定も手順どおりにやっているつもりです。 どなたかご存知のかたがいらっしゃいましたらご教授の程、よろしくお願いいたします。

    • ベストアンサー
    • Java
  • パスワード付きzip圧縮を連続処理したい

    お世話になります。 パスワード付きで圧縮したいファイルがたくさんあるので、zip形式で一括圧縮を しようと試みています。 今考えているのは、コマンドプロンプトからzipコマンドで連続圧縮するバッチを作成 なのですが、必要なアーカイブをwindows32システムフォルダにいれて、コマンドプロンプトから >zip -e sample.zip sample.txt と入力すると、zip圧縮ファイルが作成できるのですが、パスワード、パスワード確認 があるため、処理(バッチ)が中断されてしまいます。 パスワードを引数にできないものか等、錯誤しているのですが、なかなかうまくいきません。 もちろんやりたい事ができれば、形式は問いません。それといった機能が圧縮ソフトでできるなど、 何か情報がありましたらご教示いただきけないでしょうか?宜しくお願いします。

  • 圧縮したいファイルがなくてもzipが作られてしまう

    7Zipを使って圧縮ファイルを作る処理を作っています。 Windows環境で下記のコマンドを実行しています。  7z.exe 〇〇.zip a 〇〇.text 圧縮したいファイルがない場合、ファイルがありませんとメッセージ がでますが、zipファイルが作られてしまいます。 ファイルがない場合、zipファイルが作られないようにするオプション とかありましたら教えて下さい。 よろしくお願いします。

    • ベストアンサー
    • Java
  • tomcat .warファイル展開コマンドについて

    現在、次の環境でJava開発環境を構築しています。 Windows 7 Eclipse 4.2 Tomcat 6.0.35 jdk1.7.0_07 Struts 1.2.8 ここまでで、EclipseとTomcatとjdkのインストールと設定は成功しており、http://localhost:8080/index.htmlでApache Software Foundationの画面が表示されます。 次に、Strutsインストールと設定をしようとして、Struts 1.2.8を解凍してwebappsディレクトリ配下にあるstruts-example.warファイルを$CATALINA_HOME\webapps配下に設置しました。 次に、struts-example.warファイルを展開しようとして、コマンドプロンプトで次のコマンドを打ちました。 jar xvf struts-example.war しかし、struts-example.warファイルは展開されず、添付画像のメッセージが表示されました。 一体、何が悪いのでしょうか。

  • javacコマンドが操作可能なバッチファイルとして認識されません。

    質問があります。 javaコマンドは認識されるのですが、javacコマンドを入力すると、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。というメッセージが表示されてしまいます。 (Windowsのコマンドプロンプトから実行しました。) 以前、JDK1.4.1を入れていたときは普通にjavacコマンドも使えたのですが、 事情によりアンインストールをし、JDK1.3.1を入れました。 それから、javacコマンドが使えなくなってしまいました。 また、antが使いたくインストールし、ANT_HOMEもJAVA_HOMEも普通に指定したのですが、 antコマンドも認識されません。 少ない情報で申し訳ないのですが、どなたかご教授願いますでしょうか。 よろしくお願いいたします。

  • Windowsの圧縮コマンド

    Windowsの標準機能で圧縮コマンドがありますが、 一般的な操作では、 1)圧縮したいファイルアイコン上でマウス右クリック 2)プルダウン内の”送る”を選択 3)プルダウン内の”圧縮(zip形式)フォルダ”を選択で できますが、 上記操作をコマンドプロンプト上から実行する際のコマンドを ご存じの方、ご教授いただけないでしょうか? よろしくお願いします。

  • VB6で7-ZIPのAPIを使用した圧縮でフォルダが消えてしまいます

    Windows2000 VB6.0で開発をしています。 7-ZipのAPIを使用してフォルダを圧縮しています。 そのときのコマンドは下記の通りです。 "a -r -tzip -mx "XXX.zip" "XXX\" *.* 圧縮もとのXXXフォルダの中には 3つのフォルダが入っていて、 そのうち一つのフォルダにはファイルが 1つも入っていません。 上のコマンドをプログラムで実行させて、 XXX.zipファイルを作成後 圧縮元となるフォルダを削除すると、 なぜか、ZIPファイルを展開したときに、 圧縮されているはずの3つのフォルダのうち、 ファイルの入っていないフォルダだけ消えて フォルダが2つになっています。 中身が空のフォルダも残して フォルダの構成はそのままで圧縮したいので、 フォルダが消えてしまって、困っています。 ちなみに7-Zipのソフトで実行すると、 フォルダは消えません。 7-zipのコマンドで更新オプションの部分が怪しく、 「-up2q2」など追加して色々ためしているのですが、 なかなかうまくいきません(涙) どなたか、解決につながりそうな情報をお持ちでしたら、 どうか、教えてください。 よろしくお願い致します。 

  • Windows7でePub作成のためのzip圧縮

    ePub形式のファイルを作成するために、zip圧縮をしようとしています。 環境は、Windows 7 Professional SP1 64ビットです。 プロンプトによるコマンド、マウス右クリックとも、うまくいきません。 ・プロンプトですと、「zip」コマンドが認識されません。 ・マウス右クリックですと、ePubを作成する際に「mimetype」だけを先にzipにして、残りのファイルをそのzipにドロップという説明をネットで読んだのですが、ドロップができないのです。 解決方法をご存知の方がおられましたら、お願いいたします。

  • コマンドプロンプトでテキストファイルをzip圧縮

    お初です。コマンドプロンプトでテキストファイルをzip圧縮行うことができるのでしょうか? 現在使用していますパソコンのOSはWINXPです。

  • またしてもStrutsの配置ができません。

    C:配下にエブリワンフルコントロールのフォルダを作成しても、Strutsの配置ができません。 現在の環境は、次のとおりです。 Windows 7 Eclipse 4.2 Tomcat 6.0.35 jdk1.7.0_07 Struts 1.2.8 Tomcat フォルダ:C:\Tomcats\Tomcat 6.0(エブリワンフルコントロール) ここまでで、EclipseとTomcatとjdkのインストールと設定は成功しており、http://localhost:8080/でApache Software Foundationの画面が表示されます。 次に、Strutsインストールと設定をしようとして、Struts 1.2.8を解凍してwebappsディレクトリ配下にあるstruts-example.warファイルを$CATALINA_HOME\webapps配下に設置しました。 そして、コマンドプロンプトを利用して、C:\Tomcats\Tomcat 6.0\webappsフォルダに移動して、次のコマンドを実行しました。 jar xvf struts-examples.war そうしましたところ、META-INFフォルダとWEB-INFフォルダが作成され、その中にファイル類が展開されました。 次に、Tomcatを起動させ、http://localhost:8080/struts-examples/にアクセスしようとしたところ、Struts Examplesの画面が表示されなかったばかりか、次のエラー画面が表示されました。 HTTPステータス 404 - -------------------------------------------------------------------------------- type ステータスレポート メッセージ 説明 The requested resource () is not available. -------------------------------------------------------------------------------- Apache Tomcat/6.0.35 今回もStrutsの配置が不成功に終わりました。原因は一体なんでしょうか。

専門家に質問してみよう