如何加载jar文件中文件夹中的所有文件?
直到现在我正在从像File[] files = new File("res/Models/" + dir).listFiles();
这样的文件夹中加载文件,但它并不是在胖文件夹中(我得到NullPointerException
)。
注意:应该加载文件的类和我要加载的文件位于同一个jar文件中。当我在eclipse中运行我的程序时,我在那里写的行有效,但是当我展示一个jar文件时,我得到该行的NullPointerException
答案 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文档。