0

jar ファイル内のフォルダーからすべてのファイルをロードするにはどうすればよいですか?

今まで、このようなフォルダーからファイルをロードしてFile[] files = new File("res/Models/" + dir).listFiles();いましたが、ファット jar ファイルにはありません ( NullPointerException.

注:ファイルをロードする必要があるクラスとロードしたいファイルは同じjarファイルにあります。そこに書いた行は、プログラムをEclipseで実行すると機能しますが、jarファイルをエクスポートすると、その行に対してNullPointerExceptionが発生します

4

2 に答える 2

2

jar ファイルは zip ファイルであるため、次のように ZipInputStream を使用して内容を読み取ることができます。

  ZipFile zipFile = new ZipFile(file);
  ZipInputStream stream = new ZipInputStream(new BufferedInputStream(new FileInputStream(file)));
  ZipEntry entry = null;
  List<String> filePaths = new ArrayList<String>();
  while ((entry = stream.getNextEntry()) != null) {
    // this will get you the contents of the file
    InputStream inputStream = zipFile.getInputStream(entry);
    // this add the file path to the list
    filePaths.add(entry.getName());
  }

フォロもできます

于 2012-08-24T21:33:14.913 に答える
0

オブジェクトがどのように機能するかを見てみましょうFile

まず、FileTest.java という名前のファイルに次のコードがあるとします。

public class FileTest {
    public static void main() {
        File[] files = new File("temp").listFiles();

        for (File f : files) System.out.println(f.getName());
    }
}

これをコンパイルすると、javac は FileTest.class という名前のファイルを作成します。(Eclipse でもこれを行います。.class ファイルを .java ファイルとは別のフォルダーに配置するだけです。) このプログラムを実行すると、FileTest と同じフォルダーにある「temp」という名前のフォルダーが検索されます。 .class ファイル。

ここで、filetest.jar という名前の JAR ファイルを作成し、それに FileTest.class を追加するとします。ここで、JAR ファイルからプログラムを実行すると、 filetest.jarファイルと同じフォルダーにある「temp」という名前のフォルダーが検索されます。つまり、ハード ドライブのファイル システム内のファイルとフォルダーFile のみを検索します。filetest.jar を含むファイルの内容についてはまったく何も知りません。

JAR ファイルの内容を読み取るには、別の解決策を見つける必要があります。まず、JAR ファイル内には「ファイル」や「フォルダー」などがないことを理解する必要があります。JAR ファイルは、いくつかの追加機能を備えた単純な ZIP ファイルです。これまでに提供していただいた情報から、問題を解決するにはjava.util.zip.ZipFileを使用する必要があると思います。チュートリアルをグーグルで検索するか、ここにリンクした API ドキュメントを参照することから始めることをお勧めします。

于 2012-08-24T23:02:55.480 に答える