我的项目根目录中有一个资源文件夹/包,我"不"想加载某个文件.如果我想加载某个文件,我会使用类.getResourceAsStream和我会很好!!我实际上想做的是在resources文件夹中加载一个"文件夹",循环该文件夹中的文件,并获得每个文件的流,然后读取内容...假设文件名在运行前未确定...我该怎么办?有没有办法获得jar文件中文件夹中的文件列表?
我的项目根目录中有一个资源文件夹/包,我"不"想加载某个文件.如果我想加载某个文件,我会使用类.getResourceAsStream和我会很好!!我实际上想做的是在resources文件夹中加载一个"文件夹",循环该文件夹中的文件,并获得每个文件的流,然后读取内容...假设文件名在运行前未确定...我该怎么办?有没有办法获得jar文件中文件夹中的文件列表?
最后,我找到了解决方案:
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文件),如果不喜欢,可以删除它.