我正在迭代一些文件,准确地说是 5328 个文件。这些文件是平均 XML 文件,最多 60-200 行。它们首先通过简单的方法进行过滤isXml源文件解析路径。
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 时,一切都变得很好。
这是一个好奇心问题,所以如果有人能提供有关正在发生的事情的线索,我们会很高兴。
Thanks
方法Files.readAllLines() http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#readAllLines-java.nio.file.Path-假设您正在读取的文件采用 UTF-8 编码。
如果出现此异常,则您正在读取的文件很可能使用与 UTF-8 不同的字符编码进行编码。
找出使用的字符编码,然后使用其他的readAllLines http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#readAllLines-java.nio.file.Path-java.nio.charset.Charset-方法,允许您指定字符编码。
例如,如果文件采用 ISO-8859-1 编码:
return Files.readAllLines(path, StandardCharsets.ISO_8859_1).stream()... // etc.
方法FileUtiles.readLines()
(它从哪里来?)可能会假设其他内容(它可能假设文件采用系统的默认字符编码,而不是 UTF-8)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)