从jar文件中的文件夹加载所有文件

时间:2012-08-24 21:27:28

标签: java jar

如何加载jar文件中文件夹中的所有文件?

直到现在我正在从像File[] files = new File("res/Models/" + dir).listFiles();这样的文件夹中加载文件,但它并不是在胖文件夹中(我得到NullPointerException)。

注意:应该加载文件的类和我要加载的文件位于同一个jar文件中。当我在eclipse中运行我的程序时,我在那里写的行有效,但是当我展示一个jar文件时,我得到该行的NullPointerException

2 个答案:

答案 0 :(得分: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());
  }

你也可以做下面的

答案 1 :(得分: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文件不同的文件夹中。)现在,当我们运行此程序时,它将查找名为“temp”的文件夹,该文件夹与FileTest位于同一文件夹中.class文件。

现在假设我们创建一个名为filetest.jar的JAR文件并向其添加FileTest.class。现在,如果我们从JAR文件运行程序,它将查找名为“temp”的文件夹,该文件夹与 filetest.jar 文件位于同一文件夹中。换句话说,File 查找硬盘驱动器上文件系统中的文件和文件夹。它对任何文件的内容都知道绝对没有包括filetest.jar

要阅读JAR文件的内容,必须才能找到其他解决方案。首先,您需要了解在JAR文件中没有“文件”和“文件夹”这样的东西。 JAR文件只是一个ZIP文件,具有一些额外的功能。根据您在此处提供的信息,我相信要解决您的问题,您需要使用java.util.zip.ZipFile。我建议你先google搜索教程或浏览我在此处链接的API文档。

相关问题