我正在迭代一些文件,准确来说是5328个。这些文件是平均带有60-200行最大行数的XML文件。它们首先通过一个简单的方法isXmlSourceFile进行过滤,该方法解析路径。
Files.walk(Paths.get("/home/me/development/projects/myproject"), FileVisitOption.FOLLOW_LINKS)
.filter(V3TestsGenerator::isXmlTestSourceFile)
.filter(V3TestsGenerator::fileContainsXmlTag)
对于第二个过滤器,特别是fileContainsXmlTag方法,这是一个大问题。我想要检测每个文件中是否至少包含一次给定模式:
private static boolean fileContainsXmlTag(Path path) {
try {
return Files.readAllLines(path).stream().anyMatch(line -> PATTERN.matcher(line).find());
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
对于一些文件,我会得到这个异常
java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(CoderResult.java:281)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at java.nio.file.Files.readAllLines(Files.java:3205)
at java.nio.file.Files.readAllLines(Files.java:3242)
但是当我使用FileUtiles.readLines()而不是Files.readAllLines()时,一切都正常了。
这只是一个好奇的问题,如果有人知道发生了什么,那就太好了。
谢谢
Files.readAllLines(Paths.get(fileName));
- JGFMK