• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:org.apache.tools.zip.* を使って圧縮したZIPファイルを開くとエラーとなってしまう)

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

このQ&Aのポイント
  • 開発環境はNetBeans IDE 6.5、JDK 1.6.0_11、Windows XP SP2で、org.apache.tools.zip.*を使ってZIPファイルを作成しているが、日本語名のファイルを圧縮すると文字化けしてしまう
  • ant.jarの「org.apache.tools.zip.ZipOutputStream」を使えば簡単に日本語のファイル名を含むZIPファイルを圧縮できるという情報があるが、実際に試してみると解凍時にエラーが発生し中身がない
  • ロジックや設定を確認しても問題がないように見えるため、どなたか解決策をご存知の方がいらっしゃれば教えていただけないかとお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.1

具体的なコードが無いので何とも言いようが無いのですが、 以下のコードで試してみてください。 私の環境では、問題なく動作しているクラスです。 import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.zip.ZipException; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; /** * * 複数のファイル及び、サブディレクトリを含めたディレクトリを * zip圧縮・解凍する為のクラスです。 * * @author HarukaV49 * */ public class FileZip { private static final int EOF = -1; private static final int ZIP_BUFF_SIZE = 1024; /** * デフォルト(ファイル名解析)エンコーダを使用してファイル及びディレクトリをZIP圧縮します。 * @param zipFilename 作成されるZIPファイル名 * @param targetFiles 圧縮対象のファイル及びディレクトリ名列 * @return 作成されたZIPファイル * @throws ZipException ZIP例外 * @throws FileNotFoundException ファイル例外 * @throws IOException IO例外 */ public static File zip(String zipFilename, String... targetFiles) throws ZipException, FileNotFoundException, IOException { return zip(zipFilename, targetFiles, null); } /** * ファイル及びディレクトリをZIP圧縮します。 * @param zipFilename 作成されるZIPファイル名 * @param targetFiles targetFiles 圧縮対象のファイル及びディレクトリ名配列 * @param encoding ファイル名解析エンコーダ名(<A HREF="http://java.sun.com/javase/6/docs/technotes/guides/intl/encoding.doc.html">一覧</A>) * @return 作成されたZIPファイル * @throws ZipException ZIP例外 * @throws FileNotFoundException ファイル例外 * @throws IOException IO例外 */ public static File zip(String zipFilename, String[] targetFiles, String encoding) throws ZipException, FileNotFoundException, IOException { int n = targetFiles.length; File[] files = new File[n]; for(int i=0; i<n; i++) { files[i] = new File( targetFiles[i] ); } return zip( new File(zipFilename), files, encoding); } /** * ファイル及びディレクトリをZIP圧縮します。 * @param zipFile 作成されるZIPファイル * @param targetFiles targetFiles 圧縮対象のファイル及びディレクトリ配列 * @param encoding ファイル名解析エンコーダ名(<A HREF="http://java.sun.com/javase/6/docs/technotes/guides/intl/encoding.doc.html">一覧</A>) * @return 作成されたZIPファイル * @throws ZipException ZIP例外 * @throws FileNotFoundException ファイル例外 * @throws IOException IO例外 */ public static File zip(File zipFile, File[] targetFiles, String encoding) throws ZipException, FileNotFoundException, IOException { ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile)); out.setEncoding(encoding); for(int i=0; i<targetFiles.length; i++) { int deleteLength = targetFiles[i].getPath().length() - targetFiles[i].getName().length(); zip(out, targetFiles[i], deleteLength); } out.close(); return zipFile; } private static void zip(ZipOutputStream out, File targetFile, int deleteLength) throws IOException { if( targetFile.isDirectory() ) { File[] files = targetFile.listFiles(); for(int i=0; i<files.length; i++) { zip(out, files[i], deleteLength); } } else { ZipEntry target = new ZipEntry( targetFile.getPath().substring(deleteLength) ); out.putNextEntry(target); byte buf[] = new byte[ZIP_BUFF_SIZE]; int count; BufferedInputStream in = new BufferedInputStream( new FileInputStream(targetFile) ); while( (count = in.read(buf, 0, ZIP_BUFF_SIZE)) != EOF ) { out.write(buf, 0, count); } in.close(); out.closeEntry(); } } /** * デフォルト(ファイル名解析)エンコーダを使用してZIPファイルを解凍します。 * @param filename ZIPファイル名 * @param outDir 解凍先ディレクトリ名 * @return 解凍されたファイルまたはディレクトリ * @throws ZipException ZIP例外 * @throws FileNotFoundException ファイル例外 * @throws IOException IO例外 */ public static File unzip(String filename, String outDir) throws ZipException, FileNotFoundException, IOException { return unzip(filename, outDir, null); } /** * ZIPファイルを解凍します。 * @param filename ZIPファイル名 * @param outDir 解凍先ディレクトリ名 * @param encoding ファイル名解析エンコーダ名(<A HREF="http://java.sun.com/javase/6/docs/technotes/guides/intl/encoding.doc.html">一覧</A>) * @return 解凍されたファイルまたはディレクトリ * @throws ZipException ZIP例外 * @throws FileNotFoundException ファイル例外 * @throws IOException IO例外 */ public static File unzip(String filename, String outDir, String encoding) throws ZipException, FileNotFoundException, IOException { return unzip( new File(filename), new File(outDir), encoding ); } /** * ZIPファイルを解凍します。 * @param filename ZIPファイル * @param outDir 解凍先ディレクトリ * @param encoding ファイル名解析エンコーダ名(<A HREF="http://java.sun.com/javase/6/docs/technotes/guides/intl/encoding.doc.html">一覧</A>) * @return 解凍されたファイルまたはディレクトリ * @throws ZipException ZIP例外 * @throws FileNotFoundException ファイル例外 * @throws IOException IO例外 */ public static File unzip(File filename, File outDir, String encoding) throws ZipException, FileNotFoundException, IOException { ZipFile zipFile = new ZipFile(filename, encoding); @SuppressWarnings("unchecked") Enumeration<ZipEntry> enumeration = zipFile.getEntries(); while( enumeration.hasMoreElements() ) { ZipEntry entry = enumeration.nextElement(); if( entry.isDirectory() ) { new File(entry.getName()).mkdirs(); } else { File file = new File(outDir, entry.getName()); file.getParentFile().mkdirs(); FileOutputStream out = new FileOutputStream(file); InputStream in = zipFile.getInputStream(entry); byte[] buf = new byte[ZIP_BUFF_SIZE]; int size = 0; while( (size = in.read(buf)) != EOF ) { out.write(buf, 0, size); } out.close(); in.close(); } } zipFile.close(); return outDir; } }

zt2009
質問者

お礼

ありがとうございます! HarukaV49さんのソースと私のソースの違いは 私が処理を書き過ぎだったのかもしれません。 随分簡単にお書きになるなと思ったのですが、 同じようにしてみたら出来ました! ありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • AndroidでZIP解凍したい

    WindowsXPSP3のEclipse(JUNO)でAndroidアプリの開発をしています。 ZIPファイル解凍を行うためimport org.apache.tools.zip.ZipOutputStreamとしてインポート文を書いたところ「インポートされた org.apache.tools は見つかりません」と怒られてしまいます。 設定>Ant>ランタイムにant.jarがあるだけではだめなのでしょうか。 ※ZIPファイルに日本語フォルダを含むのでorg.apache.toolsを使用したいです。

  • JAVAでZIP圧縮を行うプログラムを作成したのですがXPの標準機能で解凍できません。

    org.apache.tools.zip.ZipEntry; org.apache.tools.zip.ZipOutputStream; を使用しZIP圧縮を行うプログラムを作成し無事に圧縮に成功し 解凍ソフトを使用すると解凍もうまくいくのですが windowsXPの標準で開こうとすると開くことができません。 また、解凍ソフトによっても解凍できないものもあります。 圧縮時に何か特別なことをおこなわないとならないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • jarファイルはzipファイルと同じだというけれど、無圧縮ですか?

    いつもお世話になっています。 jarファイルについてなのですが、 いろいろ調べてみたところ、 「jarファイルはzipファイルの拡張子を『.jar』に変えたもの」 という説明が随所に見られます。 しかし、zip圧縮にも、通常?圧縮だったり、無圧縮だったり、といろいろな圧縮方法があると思うのですが、 「jarファイルは、無圧縮zipファイルの拡張子を『.jar』に変えたもの」 というのが正しい解釈なのでしょうか? jarファイルを解凍して、その後、通常zip圧縮をしたら、元のファイルよりもファイルサイズが小さくなってしまったので、無圧縮なのかな・・と思い、質問させていただきました。 ご存知の方、よろしくお願いいたします。

    • ベストアンサー
    • Java
  • ファイル圧縮について

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

  • zipファイル(圧縮)について

    圧縮されたzipファイルについて質問があります。 今まではダウンロードしたzip形式の圧縮ファイルを1回クリックしただけで解凍できたのですが、なにかをしてからなのか(XP高速化のソフトを入れてから?)、同じように1回クリックをすると、圧縮ファイルの中身が表示されるだけで解凍できません。右クリックで「展開する」を選べばウィンドウが出てきて解凍できます。しかし今の状態では手間がかかって不便なので前のようにしたいです。なにか設定方法があるのでしょうか?解凍お願いします。

  • 圧縮ファイル 解凍 パス zipの中身

    自分はzip(やlzh)のファイルを解凍する前に、中身を確認できるツールを前に使ったことがあるのですが、ツール名を忘れてしまいました。もしできるものあれば教えてください。また、パスのついたzipファイルなども中身は確認できるでしょうか?また、確認できる場合、パス付きzipを更にパス付きzipで圧縮したりしても見れるでしょうか?また、そのパス付きzipの中にあるファイルのファイル名の確認は普通に解凍したときにも(1つずつファイルの確認がありその都度パス要求されるので)できてしまいますが、自分はパス付きzipの中に更にパス付きzipで圧縮したものの中にあるファイルのファイル名は確認できないようにしたいのですが、(パス付き)zipファイルの中身を確認できるツールでは、パス付きzipの中に更にパス付きzipで圧縮したものの中にあるファイルのファイル名は確認できないでしょうか?ややこしくてすみません‥。 Zipマル見え http://www.vector.co.jp/soft/dl/winnt/util/se407356.html http://www.vector.co.jp/download/file/winnt/util/fh409821.html は前使ったのではありませんが、パスのついたファイルもついてないファイルもエラーがでてダメでした。 Pika Zip http://www.vector.co.jp/soft/win95/util/se078535.html http://www.vector.co.jp/download/file/win95/util/fh227817.html は 「(半角数字3文字)+(半角英語8文字)+(半角数字4文字)」の15文字 のパスワードの付いたzipファイルはまず解読は無理でしょうか?作業しっぱなしにしても数日掛かかるでしょうか? また、パスは「.」とか「(」とか全角文字とか使ったほうがいいでしょうか? 「.(あ」とかのパスにしたら、オプションとかいろいろ弄ってこれに適した設定で解読している必要があり、解読は難しいですよね。 また、圧縮解凍ツールのLhaplusの製作者などは、Lhaplusでパスを付けたzipファイル自身にもそのパスの暗号化されている情報が含まれているので、どんなに難しいパスでzip圧縮したとしても、パスを簡単に解読できたりするのでしょうか?

  • 圧縮したZIPファイルが開けません。

    圧縮したZIPファイルにPDFを移動して開こうとしたらカーソルが少しの間回りピンポーンとなり開けません、なお昨日は開けました。パスはないです。解凍ソフトで解凍しても同じくピンポーンとなり解凍できません。原因と どうすれば開けるか教えてください。 WINDOWS10proです。よろしくお願い致します。

  • 圧縮してあるzipのファイルを解凍しようとすると

    圧縮してあるzipのファイルを解凍しようとすると 「アーカイブ”○○○.zip”を”デスクトップ”に展開できません。 (エラー1ーその操作は許可されていません。)」 とエラーメッセージが出ます。 いつもはzipファイルを解凍することが出来たのですが、そのファイルだけはエラーが出ます。 原因は何でしょうか? 宜しくお願いします。

  • zipファイル(圧縮)で エラー?

    パソコン間で大容量のファイルフォルダをzipファイルで移しましたが、移した先でフォルダをクリックすると「圧縮フォルダは無効であるか壊れています」と表示され、フォルダに、ジップマーク(洋服にあるジップ)が表示されています。 全く解凍などしても開いたりすることが出来ません。 このフォルダを再び使用するにはどのようにすればよいでしょうか。

  • 7-Zipで圧縮

    圧縮率がいいと噂を聞き7-Zipで圧縮してみたら元のファイルの容量より増えてしまいました。超圧縮で実行しました。 何かやり方が間違っているのでしょうか? winrarで同じファイルを圧縮したら、ちゃんと元の容量より少なくなりました。 ちなみにこのサイトの(5)の項目を見ながらやりました。 http://www.xucker.jpn.org/pc/7zip_use.html

このQ&Aのポイント
  • ブラックの印字がかすれる、色が薄いという問題が発生しています。ヘッドクリーニングを何回しても効果がないため困っています。
  • ブラザー製品の印字がかすれてしまい、特にブラックの色が薄くなってしまう問題があります。ヘッドクリーニングを試してみましたが、効果がありませんでした。
  • 印刷物のブラックの印字がかすれてしまい、色が薄くなってしまうという問題があります。ヘッドクリーニングを何度か試しましたが、改善されません。困っています。
回答を見る

専門家に質問してみよう