如何从 jar 文件内部访问资源文件夹内的文件夹?
我在项目的根目录中有一个资源文件夹/包,我“不”想要加载某个文件。如果我想加载某个文件,我会使用class.getResourceAsStream,我会没事的!我实际上想做的是在资源文件夹中加载一个“文件夹”,循环该文件夹中的文件,并获取每个文件的流并读取内容...假定在运行时之前未确定文件名...我该怎么办?有没有办法在jar文件中获取文件夹中的文件列表?请注意,包含资源的 Jar 文件与运行代码的 jar 文件相同...
我在项目的根目录中有一个资源文件夹/包,我“不”想要加载某个文件。如果我想加载某个文件,我会使用class.getResourceAsStream,我会没事的!我实际上想做的是在资源文件夹中加载一个“文件夹”,循环该文件夹中的文件,并获取每个文件的流并读取内容...假定在运行时之前未确定文件名...我该怎么办?有没有办法在jar文件中获取文件夹中的文件列表?请注意,包含资源的 Jar 文件与运行代码的 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文件)时起作用,如果您不喜欢它,可以将其删除。
请尝试以下操作。
创建资源路径,例如,如果您的类路径是 com.abc.package.MyClass,并且您的文件位于 src/com/abc/package/resources/ 中:"<PathRelativeToThisClassFile>/<ResourceDirectory>"
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/");