我正在寻找一种从给定的classpath目录中获取所有资源名称的列表的方法,例如method List<String> getResourceNames (String directoryName)。
classpath
method List<String> getResourceNames (String directoryName)
例如,给定一个路径目录x/y/z包含文件a.html,b.html,c.html和子目录d,getResourceNames("x/y/z")应该返回一个List<String>包含下列字符串:['a.html', 'b.html', 'c.html', 'd']。
a.html,b.html,c.html
d
getResourceNames("x/y/z")
List<String>
['a.html'
'b.html', 'c.html', 'd']
它应同时适用于文件系统和jar中的资源。
我知道我可以用Files,JarFiles和URLs 编写一个简短的代码段,但是我不想重新发明轮子。我的问题是,鉴于现有的公共可用库,最快的实现方法是getResourceNames什么?Spring和Apache Commons堆栈都是可行的。
Files,JarFiles
URLs
getResourceNames
Spring
Apache Commons
自定义扫描仪
实施自己的扫描仪。例如:
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(); }