首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从jar文件中访问资源文件夹中的文件夹?

如何从jar文件中访问资源文件夹中的文件夹?
EN

Stack Overflow用户
提问于 2012-06-13 18:19:40
回答 11查看 158.1K关注 0票数 151

我在项目的根目录下有一个资源文件夹/包,我“不”想加载某个文件。如果我想加载某个文件,我会使用class.getResourceAsStream,这样就可以了!我实际上想做的是在resources文件夹中加载一个“文件夹”,循环该文件夹中的Files,并获取每个文件的Stream并读取内容……假设在运行前没有确定文件名...我该怎么办?有没有办法获得jar文件中某个文件夹内的文件列表?请注意,包含资源的Jar文件与运行代码的jar文件是同一个jar文件……

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-11-19 21:43:06

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

代码语言:javascript
复制
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文件)上运行应用程序时,第二个代码块才起作用,如果你不喜欢它,你可以删除它。

票数 117
EN

Stack Overflow用户

发布于 2012-11-05 15:13:03

尝试以下操作。

将资源路径设置为包,例如,如果您的类路径是com.abc.package.MyClass,并且您的资源文件位于src/com/abc/ "<PathRelativeToThisClassFile>/<ResourceDirectory>" /resources/:

代码语言:javascript
复制
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
    }
}

您还可以使用

代码语言:javascript
复制
URL url = MyClass.class.getResource("/com/abc/package/resources/");
票数 11
EN

Stack Overflow用户

发布于 2017-03-03 13:17:01

我知道这是很多年前的事了。但仅供遇到此话题的其他人使用。您可以做的是对目录路径使用getResourceAsStream()方法,输入流将拥有该目录中的所有文件名。之后,您可以将目录路径与每个文件名连接在一起,并在循环中为每个文件调用getResourceAsStream。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11012819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档