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

ffscu2ro  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(320)

如何从jar文件中的文件夹加载所有文件?
直到现在我都是从这样的文件夹中加载文件 File[] files = new File("res/Models/" + dir).listFiles(); 但它不在胖jar文件中(我得到一个 NullPointerException ).
注意:应该加载文件的类和我要加载的文件在同一个jar文件中。当我在eclipse中运行程序时,我在上面写的那一行是有效的,但是当我导出jar文件时,我得到了该行的nullpointerexception

tvmytwxo

tvmytwxo1#

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());
  }

你也可以做follo

w46czmvw

w46czmvw2#

让我们看看 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.class文件位于同一文件夹中的名为“temp”的文件夹。
现在假设我们创建了一个名为filetest.jar的jar文件,并向其中添加filetest.class。现在,如果我们从jar文件运行程序,它将查找与filetest.jar文件位于同一文件夹中的名为“temp”的文件夹。换句话说, File 只在硬盘上的文件系统中查找文件和文件夹。它完全不知道任何文件的内容,包括filetest.jar。
为了读取jar文件的内容,必须找到不同的解决方案。首先,您需要了解jar文件中没有“文件”和“文件夹”这样的东西。jar文件只是一个带有一些额外特性的zip文件。根据您在这里提供的信息,我相信要解决您的问题,您需要使用java.util.zip.zipfile。我建议你从搜索教程开始,或者浏览我在这里链接的api文档。

相关问题