0

重複の可能性:
JAR ファイル内のファイルを一覧表示するにはどうすればよいですか?

それが主な問題です.zipファイル内のファイルをファイルの配列として取得する方法

4

5 に答える 5

1

zip からファイルを抽出する以外に、zip ファイル内のファイルを直接参照する URI スキームを知りません。そのため、インスタンスでStringはなくファイル名のリストで終了します。File

したがってZipFile、 、ZipEntry、入力ストリームなどのクラスを使用して Zip からファイルを抽出すると、配列内でそれを参照する File インスタンスを作成できます。

于 2012-09-03T07:18:17.840 に答える
1

簡単な答えは、できないということです。AFileは基本的に、ホスト オペレーティング システムのファイル システム内のオブジェクトの抽象化されたファイル システム パスです。ただし、ZIP ファイル内のファイルはファイル システム内のオブジェクトではないため、ファイル システム パスはありません。

考えてみてください。Linux で<pathname>(たとえば) 実行できるような ZIP ファイル エントリを作成できますか? cat <pathname>またはWindowsで似たようなものはありますか?


それで、あなたは何ができますか?

  • ZIP ファイルをファイル システムに抽出し (外部コマンドを使用するのが最も簡単です)、抽出したエントリを含むファイルを参照できます。ZIP のディレクトリ構造を対応するパス名に変換するには、少し手を加える必要があります。

  • File オブジェクトの代わりにオブジェクトを使用できますZipEntryが、Zip ファイルが開いている間のみ有効/使用可能になると思います。

  • FileSystemZIP ファイルをファイル システムとして扱うことができるJava 7 スタイルの実装を見つけたり、作成したりできます。Fileしかし、それらの API はオブジェクトなどを使用しません。

  • お使いのオペレーティング システムがサポートしている場合は、ZIP ファイルをファイル システムとして「マウント」してから動作させることができますFile。例: http://en.wikipedia.org/wiki/Filesystem_in_Userspaceプラスhttp://code.google.com/p/fuse-zip/

于 2012-09-03T07:49:03.097 に答える
0

また、Apache Commons Compress api を確認してください。開始方法の例がいくつかあります http://commons.apache.org/compress/examples.html

于 2012-09-03T07:19:38.753 に答える
0

アップデート

zip 内のファイルの配列を取得するには、最初にそれらを一時的な場所に抽出する必要があります。

import java.util.zip.*;
import java.io.File;
import java.util.ArrayList;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Enumeration;
import java.io.IOException;

public class ZipFileExtractor {

    public static void main(String[] args) {
        File[] zipFiles = ZipFileExtractor.getFileArray("archive.zip");
        System.out.println(zipFiles.length);
    }

    public static File[] getFileArray(String archiveFileName) {

        ArrayList<File> zipArrayList = new ArrayList<File>();

        try {

            ZipFile zFile = new ZipFile(archiveFileName);

            for (Enumeration<? extends ZipEntry> e = zFile.entries(); e.hasMoreElements(); ) {

                ZipEntry zEntry = e.nextElement();

                InputStream in = zFile.getInputStream(zEntry);

                File temp = File.createTempFile(zFile.getName(), null);
                temp.deleteOnExit();

                FileOutputStream out = new FileOutputStream(temp);

                byte[] buffer = new byte[1024];
                while (in.read(buffer) != -1) {
                    out.write(buffer);
                }

                zipArrayList.add(temp);
            }

        } catch (IOException e) {
            
        }

        return zipArrayList.toArray(new File[zipArrayList.size()]);
    }
}

 


 

パッケージにはZipInputStreamという API クラスがあります。java.util.zip

それにはたくさんのメソッドがあり、その中にgetNextEntry()はほとんどそれを行うものがあります:

ArrayList<ZipEntry> zipArrayList = new ArrayList<ZipEntry>();

ZipInputStream zis = ZipInputStream(new FileInputStream("archive.zip"));

while ((ZipEntry ze = zis.getNextEntry()) != null) {
   zipArrayList.add(ze.getName());
}

上記のコードをコンパイルしようとはしていないので、いくつか問題があるかもしれませんが、アイデアが明確であることを願っています.

于 2012-09-03T07:17:49.647 に答える
0

java.util.zipファイルを解凍するためのユーティリティを含むパッケージをチェックアウトすることをお勧めします。

于 2012-09-03T07:15:10.560 に答える