当前位置: 首页 > 面试题库 >

从classpath目录获取资源列表

司空思聪
2023-03-14
问题内容

我正在寻找一种从给定的classpath目录中获取所有资源名称的列表的方法,例如method List<String> getResourceNames (String directoryName)

例如,给定一个路径目录x/y/z包含文件a.html,b.html,c.html和子目录d,getResourceNames("x/y/z")应该返回一个List 包含下列字符串: ['a.html', 'b.html', 'c.html', 'd']

它应该同时适用于文件系统和jar中的资源。

我知道我可以用Files,JarFiles和URLs编写一个简短的代码段,但是我不想重新发明轮子。我的问题是,鉴于现有的公共可用库,最快的实现方法是getResourceNames什么?Spring和Apache Commons堆栈都是可行的。


问题答案:

Custom Scanner

实施自己的扫描仪。例如:

private List<String> getResourceFiles(String path) throws IOException {
    List<String> filenames = new ArrayList<>();

    try (
            InputStream in = getResourceAsStream(path);
            BufferedReader br = new BufferedReader(new InputStreamReader(in)))
        String resource;

        while ((resource = br.readLine()) != null) {
            filenames.add(resource);
        }
    }

    return filenames;
}

private InputStream getResourceAsStream(String resource) {
    final InputStream in
            = getContextClassLoader().getResourceAsStream(resource);

    return in == null ? getClass().getResourceAsStream(resource) : in;
}

private ClassLoader getContextClassLoader() {
    return Thread.currentThread().getContextClassLoader();
}

Spring Framework

PathMatchingResourcePatternResolver从Spring Framework使用。

Ronmamo Reflections

对于巨大的CLASSPATH值,其他技术在运行时可能很慢。更快的解决方案是使用ronmamo的Reflections API,该API在编译时对搜索进行预编译。



 类似资料:
  • 问题内容: 我正在寻找一种从给定的目录中获取所有资源名称的列表的方法,例如。 例如,给定一个路径目录x/y/z包含文件和子目录,应该返回一个包含下列字符串:, 。 它应同时适用于文件系统和jar中的资源。 我知道我可以用和 编写一个简短的代码段,但是我不想重新发明轮子。我的问题是,鉴于现有的公共可用库,最快的实现方法是什么?和堆栈都是可行的。 问题答案: 自定义扫描仪 实施自己的扫描仪。例如:

  • 问题内容: 我有一个颜色清单 (我从别人问的另一个问题中取出了此列表) 我要做的是获取所有颜色名称。我需要列表,以便随后可以在微调器中填充该列表。伪代码将像这样。 我想要的是颜色列表。我希望这可以为所有帮助加油打气 问题答案: 您可以使用反射来访问颜色列表:

  • 问题内容: 我正在使用以下方法从WildFly中的WAR文件获取资源: 当应用程序作为爆炸式WAR部署时,它可以工作。 它也曾经 与压缩的WAR一起 使用 。昨天,我在Eclipse中进行了项目的干净和重建,但它刚刚停止工作。 当我检查资源根目录时: 我得到这个: 因此,难怪它不起作用。它可能与JBoss模块加载有关,但是我不知道这是错误还是正常行为。 我在StackOverflow上发现了各种类

  • 如果文件位置是资源文件夹,下面的代码工作正常,但是当文件位置在项目目录之外时,比如(c:\file.json),它就失败了。我们如何从项目目录之外加载文件。

  • 什么是ClassPath 简单说来ClassPath就是查找class文件的路径,在Tomcat等容器下,ClassPath一般是WEB-INF/classes,在普通java程序中,我们可以通过定义-cp或者-classpath参数来定义查找class文件的路径,这些路径就是ClassPath。 为了项目方便,我们定义的配置文件肯定不能使用绝对路径,所以需要使用相对路径,这时候最好的办法就是把配

  • 我有以下数据: 获取密钥列表的最佳方法是什么(好像它是一个dict而不是一个数组)?目前我正在做: 但这感觉有点老土