java - Java:递归模式搜索文件(具有相对路径)以作为变量传递
问题描述
...认为这很简单...:/
我需要从工作目录(我可以找到这个)递归搜索匹配模式的文件,然后将每个文件作为输入传递给缓冲读取器。
到目前为止,我还不能很好地弄清楚路径、文件和字符串之间的类型匹配,以便在函数之间传递值......
Lil 背景:该程序将根据年份和州移动到不同的文件夹,以将文本文件解析为表格格式以进行数据质量检查。我的文本文件解析代码运行良好,但需要自动获取州内每个县的日志文件。
我实现了代码来查找当前工作目录:
File workingDir = new File(new File(".").getAbsolutePath());
Path workDir = Paths.get(workingDir.getCanonicalPath());
我得到了两个,因为我没有取得足够的进展来知道我真正需要哪个......
我已经(谢谢!)能够递归地从工作目录中找到所有文件:
Files.find(Paths.get(workDir.toString()),
Integer.MAX_VALUE,
(filePath, fileAttr) -> fileAttr.isRegularFile())
.forEach(System.out::println);
我无法弄清楚如何为我想要的文件传递过滤器;或如何将文件放入可迭代列表中,以作为缓冲读取器的输入文件列表传递。
//List of input files for bufferedreader:
java.util.List<String> inputFiles = new ArrayList<String>();
...然后将“Files.find(paths...”块更改为:
.forEach(inputFiles.add());
...不起作用。我不知道要为参数传递什么,并且 '...inputFiles.add()' 不会在没有参数的情况下编译(JDK 10)。
我尝试了一个 PathMatcher,但无法弄清楚如何对我传递给它的函数进行类型匹配,以便编译代码。
这是我的模式,在标准正则表达式中:
Pattern logFile = Pattern.compile("Correct_[\\d]{4}-[\\d]{2}-[\\d]{2}_[\\d]{2}-[\\d]{2}.txt");
该模式转换为:“Correct_yyyy-MM-dd_HH-MM.txt”。
我无法编译以下内容,在“.collect(Collectors.toList());”中的“收集器”上出现“.java:87: 错误:找不到符号”:
inputFiles = Files.walk(Paths.get(workDir.toString()))
.filter(Files::isRegularFile)
.map(Path::toFile)
.collect(Collectors.toList());
我已经导入了 java.io。,java.io.文件。, java.nio.* & java.nio.file.* 在第一行代码中。
显然,我不理解 file.io/file.nio,并且在阅读了 Oracle 文档/教程以及众多 SO 和其他论坛/站点后,我一直无法生成工作代码。
谁能指出我正确的方向?
太感谢了!
解决方案
您报告的原始问题是java:87: error: cannot find symbol" on 'Collector' in ".collect(Collectors.toList());
. 查看错误,问题已得到充分说明-您没有java.util.stream.Collectors
在代码中导入。
但是一旦你导入它,你就会遇到另一个问题 - java:88: error: incompatible types: inference variable T has incompatible bounds .collect(Collectors.toList());
. 这通常意味着蒸汽不会产生您需要的类型。您需要一个 inputFiles 的值,它的类型为List<String>
。您得到的集合是List<File>
,因为您之前在地图中使用了 Path.toFile() 。我建议您删除地图(将其保留为路径列表)或将 inputFiles 更改为List<File>
.
顺便说一句,你可以在这篇文章中看到如何处理这个错误,例如:java: incompatible types: inference variable T has incompatible bounds。
一般来说,最好一次调试你的代码一个编译错误,然后简单地在 SO 中查找关于你遇到的错误的帖子。这种过程可能是迭代的并且需要一些时间。
推荐阅读
- unity3d - Unity Build 不同于编辑器
- julia - 我无法向 Julia 添加 github 存储库
- php - .htaccess 文件中的动态子域处理,用于 xxx.domain.com 重定向到 ../users 文件夹
- html - 在来自 Unix shell 的电子邮件中嵌入动态 HTML 表
- javascript - 在 Next.js 页面中检索子域
- javascript - Flexbox,滚动元素
- mysql - 为什么MYSQL时间比服务器时间晚2分钟
- reactjs - 动作完成时如何告诉 React-Redux 视图?
- mongodb - 为什么mongodb不能对复合索引的无前缀子索引进行有效排序?
- python - 如何将谷歌应用引擎的“软内存限制”增加到 2gb 以上