【问题标题】:Get all file names from resource folder in java project从java项目的资源文件夹中获取所有文件名
【发布时间】:2017-12-08 22:57:15
【问题描述】:

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

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

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

有没有java方法什么的来获取这些名字?

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

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

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

listFiles() 之类的吗?

谢谢

【问题讨论】:

    标签: java resources


    【解决方案1】:

    不,因为类路径在 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 的建议动态获取文件名;只需使用您自己的类名(包括包;您的屏幕截图看起来像是在默认包中,这是一个坏主意)。

    【讨论】:

    • 所以我可以一次读取一个文件名,但不能将所有文件名放入一个数组并按照我的意愿发送到getResourceAsStream?
    • 我不知道我是否理解正确。当然,您可以遍历条目并构建资源标识符的数组(或更好的数据结构)。 getResourceAsStream 只接受单个标识符。
    • 这就是我想做的。我想将所有歌曲名称作为字符串并将它们放在我自己的字符串数组中。然后将它们作为我希望的单个路径加载到getResourceAsStream。我只是不知道如何从resources 文件夹中获取所有歌曲名称。
    • 你能帮我弄清楚如何遍历resources中的歌曲名称吗?
    【解决方案2】:

    你可以试试这样的

    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

    【讨论】:

      猜你喜欢
      • 2016-02-11
      • 2016-08-06
      • 1970-01-01
      • 2019-03-24
      • 2022-08-23
      • 2011-08-25
      • 1970-01-01
      • 2017-03-23
      相关资源
      最近更新 更多