如何在 web 模块中的类路径中的目录中列出文件
How to list files in directory inside classpath in web module
在我的 WEB 应用程序中有一个包含 JSON 和文本文件的类路径或资源目录。
/classes/mydir/a.json
/classes/mydir/b.json
/classes/mydir/b.txt
/classes/mydir/xyz.json
我需要一个 InputStream
(给 Jackson JSON ObjectMapper
)到这个目录中的所有 JSON 文件。
我做了一个
URL dirUrl = getClass().getResource("/mydir");
这给了我
vfs:/content/mywar.war/WEB-INF/classes/mydir/
这是正确的目录,但使用 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
您可以使用Reflections库扫描类路径上的包:
Reflections reflections = new Reflections("mydir", new ResourcesScanner());
Set<String> resources = reflections.getResources(Pattern.compile(".*"));
System.out.println(resources); // [mydir/a.json, ...
@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..
}
正是我需要的。
在我的 WEB 应用程序中有一个包含 JSON 和文本文件的类路径或资源目录。
/classes/mydir/a.json
/classes/mydir/b.json
/classes/mydir/b.txt
/classes/mydir/xyz.json
我需要一个 InputStream
(给 Jackson JSON ObjectMapper
)到这个目录中的所有 JSON 文件。
我做了一个
URL dirUrl = getClass().getResource("/mydir");
这给了我
vfs:/content/mywar.war/WEB-INF/classes/mydir/
这是正确的目录,但使用 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
您可以使用Reflections库扫描类路径上的包:
Reflections reflections = new Reflections("mydir", new ResourcesScanner());
Set<String> resources = reflections.getResources(Pattern.compile(".*"));
System.out.println(resources); // [mydir/a.json, ...
@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..
}
正是我需要的。