如何在Web模块的类路径内的目录中列出文件

时间:2019-03-29 15:41:31

标签: java jboss-eap-7 vfs

在我的WEB应用程序中,有一个包含JSON和文本文件的类路径或资源目录。

InputStream

对于此目录中的所有JSON文件,我需要一个ObjectMapper(用于给Jackson JSON URL dirUrl = getClass().getResource("/mydir"); )。

我做

vfs:/content/mywar.war/WEB-INF/classes/mydir/

这给了我

select ... where not in (select ...)

哪个是正确的目录,但是任何使用toUri,File或nio类的下一步都抱怨说不支持'vfs'。

是否有(JBoss / EAP)实用工具类从JBoss EAP内部的类路径中读取资源,或者有人可以举一个示例来列出类路径目录的JSON文件吗?希望不再使用其他依赖项。

运行时:JBoss EAP 7.1.4.GA(WildFly Core 3.0.17.Final-redhat-1)
Java:1.8.0_191-b12

2 个答案:

答案 0 :(得分:1)

@Karol的回答最终使我进入了我想要的RedHat jboss-vfs框架。因此,我在pom中添加了以下maven artefact

    <dependency>
        <groupId>org.jboss</groupId>
        <artifactId>jboss-vfs</artifactId>
    </dependency>

然后我执行以下操作:

URL dirUrl = getClass().getResource("/mydir");
VirtualFile vfDir = VFS.getChild(dirUrl.toURI());
List<VirtualFile> jsonVFs = vfDir.getChildren(new VirtualFileFilter() {
    @Override
    public boolean accepts(VirtualFile file) {
        return file.getName().toLowerCase().endsWith(".json");
    }
});
for (int i = 0; i < jsonVFs.size(); i++) {
    VirtualFile vf = jsonVFs.get(i);
    File f = vf.getPhysicalFile();
    MyClass fromJson = objectMapper.readValue(f, MyClass.class); 
    // Do something with it..
}

正是我所需要的。

答案 1 :(得分:0)

您可以使用Reflections库来扫描类路径上的包:

Reflections reflections = new Reflections("mydir", new ResourcesScanner());
Set<String> resources = reflections.getResources(Pattern.compile(".*"));
System.out.println(resources); // [mydir/a.json, ...