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 回答