Spring batch Spring Batch如何使用PathMatchingResourcePatternResolver从文件夹及其所有子文件夹读取所有json文件

Spring batch Spring Batch如何使用PathMatchingResourcePatternResolver从文件夹及其所有子文件夹读取所有json文件,spring-batch,Spring Batch,我使用SpringBatch MultiResourceItemReader来读取多个模块文件。这些文件位于父目录及其子目录中 已尝试: 通过我自己的自定义代码读取文件,并手动创建资源数组 使用PathMatchingResourcePatternResolver,如代码示例中所示(受此启发 @Bean 公共多资源项阅读器 multiResourceItemReader(){ PathMatchingResourcePatternResolver模式解析器=新建 路径匹配源模式解析程序(); 资

我使用SpringBatch MultiResourceItemReader来读取多个模块文件。这些文件位于父目录及其子目录中

已尝试:

  • 通过我自己的自定义代码读取文件,并手动创建资源数组

  • 使用PathMatchingResourcePatternResolver,如代码示例中所示(受此启发

    @Bean
    公共多资源项阅读器
    multiResourceItemReader(){
    PathMatchingResourcePatternResolver模式解析器=新建
    路径匹配源模式解析程序();
    资源资源[]=null;;
    试一试{
    资源=
    patternResolver.getResources(“文件:C:\\inputFolder\\***\\.json”);
    }捕获(IOE异常){
    e、 printStackTrace();
    }
    MultiResourceItemReader
    multiResourceItemReader=新的multiResourceItemReader();
    multiResourceItemReader.setResources(资源);
    multiResourceItemReader.setDelegate(新
    ItemReaderForMulti(文件管理器));
    返回multiResourceItemReader;
    }
    

  • 您可以使用以下代码段:

    PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    Resource[] resources = resolver.getResources("file:/root/folder/**/*.json");
    

    ***
    将从
    根/文件夹
    递归返回文件。然后将资源数组传递给
    MultiResourceItemReader

    ,而不是使用windows反斜杠-解决方案是使用类似Unix\Linux的语法:

    不起作用: resources=patternsolver.getResources(“文件:C:\\inputFolder\\***\\*.json”)

    效果良好:
    resources=patternsolver.getResources(“file:C:/inputFolder/***.json”);

    我的答案中的代码片段适用于基于unix的操作系统(在我的例子中在mac操作系统上进行了测试),但同样的方法应该适用于windows上的
    文件:C:\\inputFolder\***\.json
    。谢谢Mahmoud,我尝试使用了“file:C:\\inputFolder\***.json”,“C:\\inputFolder\***.json”和其他变体,但它似乎不起作用。你知道如何让它在Windows上工作吗?你需要像代码片段中那样,用反斜杠转义。file:C:\\inputFolder***.json`和
    C:\\inputFolder\***.json
    你尝试过的方法在Windows上不起作用,因为
    `没有转义。你尝试过吗
    file:C:\\inputFolder\***.json`和我的评论一样吗?哦,真的很抱歉,我刚刚意识到我以前的评论被SO格式化得很糟糕(在SO中键入[backtick][backslash][backtick]没有正确呈现),并炸毁了整个评论!我的意思是,由于反斜杠是一个特殊字符,你需要对它进行转义(使用另一个反斜杠).C:\\inputFolder\***.json和
    C:\\inputFolder\***.json
    这两个您尝试的
    文件都无法在windows上运行,因为在
    inputFolder
    之后的\没有转义。您尝试过
    模式解析程序.getResources(“文件:C:\\inputFolder\***\***.json”);
    ?在这种情况下(以及看到您的答案后),我的答案中的示例也应该适用于windows。我不应该对我的答案添加我的第一条评论(这实际上让我们走错了方向)。但至少,我很高兴看到您解决了问题!如果是这样,请接受答案。
    PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    Resource[] resources = resolver.getResources("file:/root/folder/**/*.json");