Spring batch Spring Batch如何使用PathMatchingResourcePatternResolver从文件夹及其所有子文件夹读取所有json文件
我使用SpringBatch MultiResourceItemReader来读取多个模块文件。这些文件位于父目录及其子目录中 已尝试:Spring batch Spring Batch如何使用PathMatchingResourcePatternResolver从文件夹及其所有子文件夹读取所有json文件,spring-batch,Spring Batch,我使用SpringBatch MultiResourceItemReader来读取多个模块文件。这些文件位于父目录及其子目录中 已尝试: 通过我自己的自定义代码读取文件,并手动创建资源数组 使用PathMatchingResourcePatternResolver,如代码示例中所示(受此启发 @Bean 公共多资源项阅读器 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");