3

我在类路径上有一组资源,大致如下:

com/example/foo
    r1.txt
    r2.txt
    r3.txt
    bar/
      b1.txt
      b2.txt
      baz/
       x.txt
       y.txt

我知道这个包位于 WEB-INF lib 中的类路径上,我希望能够遍历从 com.example.foo 开始的类路径以查找所有 .txt 文件。使用 siganutre 调用类似于以下内容的函数。

列出文件 = findFiles("com/example/foo","*.txt");

我使用的是 spring 3.1,所以我很乐意使用 spring 中的任何方法。

更新: 使用下面基于 Spring 的 @jschoen 建议的解决方案:

PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("classpath:com/example/foo/**/*.txt");

弹簧匹配使用蚂蚁风格的图案,因此需要双 **

4

1 回答 1

2

如果我没记错的话,你可以使用Reflections 库。

public static void main(String[] args) {
    Reflections reflections = new Reflections(new ConfigurationBuilder()
    .setUrls(ClasspathHelper.forPackage("your.test.more"))
    .setScanners(new ResourcesScanner()));

    Set<String> textFiles = reflections.getResources(Pattern.compile(".*\\.txt"));

    for (String file : textFiles){
        System.out.println(file);
    }
}

不管你放什么包,你只需要一个开始,它会找到所有其他的。

编辑:Spring 中似乎还有PathMatchingResourcePatternResolver可以使用。它有一个getResources(String locationPattern)我假设你可以使用传递模式".*\\.txt"并且会以相同的方式工作。我所在的位置没有 Spring 设置,否则我会自己进行测试。

于 2012-10-30T17:53:32.673 回答