我正在使用Files.lines(...)读取一个非常大(500mb)的文件。它可以读取部分文件,但在某个点上会因为java.nio.charset.MalformedInputException: Input length = 1而中断。
我认为该文件包含不同字符集的行。有没有办法跳过这些已损坏的行?我知道返回的流是由Reader支持的,我也知道如何跳过Reader,但不知道如何从流中获取Reader以设置我所需的内容。
List<String> lines = new ArrayList<>();
try (Stream<String> stream = Files.lines(Paths.get(getClass().getClassLoader().getResource("bigtest.txt").toURI()), Charset.forName("UTF-8"))) {
stream
.filter(s -> s.substring(0, 2).equalsIgnoreCase("aa"))
.forEach(lines::add);
} catch (final IOException e) {
// catch
}
dec
和path
,并对StandardCharsets.UTF_8
以及CodingErrorAction.*
,Channels.newReader
,FileChannel.open
等使用import static
。 - Holger