如何从我的jar文件中获取资源“文件夹”?

问题

我在项目的根目录中有一个资源文件夹/包,我"不"想要加载某个文件。如果我想加载某个文件,我会使用class.getResourceAsStream,我会没事的!我真正想做的是在资源文件夹中加载一个"文件夹",循环该文件夹内的文件并获取每个文件的流并读入内容...假设在运行时之前未确定文件名... 我该怎么办?有没有办法在jar文件中获取文件夹中的文件列表?请注意,带有资源的Jar文件与运行代码的jar文件相同...

提前致谢...


#1 热门回答(97 赞)

最后,我找到了解决方案:

final String path = "sample/folder";
final File jarFile = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getPath());

if(jarFile.isFile()) {  // Run with JAR file
    final JarFile jar = new JarFile(jarFile);
    final Enumeration<JarEntry> entries = jar.entries(); //gives ALL entries in jar
    while(entries.hasMoreElements()) {
        final String name = entries.nextElement().getName();
        if (name.startsWith(path + "/")) { //filter according to the path
            System.out.println(name);
        }
    }
    jar.close();
} else { // Run with IDE
    final URL url = Launcher.class.getResource("/" + path);
    if (url != null) {
        try {
            final File apps = new File(url.toURI());
            for (File app : apps.listFiles()) {
                System.out.println(app);
            }
        } catch (URISyntaxException ex) {
            // never happens
        }
    }
}

第二个块只在IDE上运行应用程序时工作(不是使用jar文件),如果你不喜欢它,可以删除它。


#2 热门回答(14 赞)

请尝试以下方法。
制作资源路径256506720E.g。如果你的类路径是com.abc.package.MyClass,你的resoure文件在src / com / abc / package / resources /中:

URL url = MyClass.class.getResource("resources/");
if (url == null) {
     // error - missing folder
} else {
    File dir = new File(url.toURI());
    for (File nextFile : dir.listFiles()) {
        // Do something with nextFile
    }
}

你也可以使用

URL url = MyClass.class.getResource("/com/abc/package/resources/");

#3 热门回答(5 赞)

我知道这是很多年前的事了。但只是为了其他人遇到这个话题。你可以做的是使用目录路径的255848339方法,输入流将具有该目录的所有文件名。之后,你可以使用每个文件名连接dir路径,并为循环中的每个文件调用getResourceAsStream。