一尘不染

Java从类路径目录中获取资源列表

java

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

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

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

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


阅读 438

收藏
2020-03-01

共1个答案

一尘不染

自定义扫描仪

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

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();
}
2020-03-01