从java项目的资源文件夹中获取所有文件名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从java项目的资源文件夹中获取所有文件名相关的知识,希望对你有一定的参考价值。

现在我手动将歌曲文件名写入String数组,然后将字符串发送到InputStream is = this.getClass().getResourceAsStream(filename);播放歌曲。

我宁愿遍历我的资源文件夹中的所有歌曲名称并将它们加载到数组中,这样每次我添加一首歌曲时,我都不需要手动将其键入数组。

我的所有歌曲都位于resources文件夹中:

是否有一个java方法或东西来获取这些名称?

当我导出为.jar时,文件需要工作。

我以为我可以用这样的东西?

InputStream is = this.getClass().getClassLoader().getResourceAsStream("resources/");

是否有listFiles()或其他东西?

谢谢

答案

不,因为类路径在Java中是动态的。任何额外的Jar都可以为一个包做出贡献,类加载器可以像想象的那样动态,甚至可以根据需要动态创建类或资源。

如果您有一个特定的JAR文件并且您知道该JAR文件中的路径,那么您可以简单地将该文件视为存档,并通过java.util.jar.JarFile访问它,该文件允许您列出文件中的所有条目。

JarFile jar = new JarFile("res.jar");
Enumeration<JarEntry> entries = jar.entries();
while (entries.hasMoreElements()) {
    JarEntry entry = entries.nextElement();
    System.out.println(entry.getName());
}

如果你想在不知道JAR文件名和路径的情况下这样做(例如通过JAR本身中的类),你需要动态获取文件名,如Evgeniy建议的那样;只使用你自己的类名(包括包;你的截图看起来像是在默认包中,这是一个坏主意)。

另一答案

你可以尝试这样的事情

Enumeration<URL> e = ClassLoader.getSystemResources("org/apache/log4j");
while (e.hasMoreElements()) {
   URL u = e.nextElement();
   String file = u.getFile();
...

file:/D:/.repository/log4j/log4j/1.2.14/log4j-1.2.14.jar!/org/apache/log4j

从这里提取jar路径并使用JarFile类来了解org / apache / log4j内容。

如果它被解压缩,你将获得直线路径并使用File.listFIles

以上是关于从java项目的资源文件夹中获取所有文件名的主要内容,如果未能解决你的问题,请参考以下文章

在同一个项目中使用两个版本的谷歌云资源管理 Java API

与maven的Java项目无法找到资源

Lumen:刚刚安装了lumen,无法从公用文件夹中获取资源

从 Fragment 中的适配器(recyclerview)获取所有项目

如何从 Bundle 中获取 PNG 文件的资源路径?

普通JAVA类 如何获取,WEB项目的根路径