读取文本文件时检查行中是否有不可打印的字符

2022-08-31 22:13:54

我的程序必须逐行读取文本文件。UTF-8 格式的文件。我不确定文件是否正确 - 可以包含不可打印的字符。是否可以在不进入字节级别的情况下对其进行检查?谢谢。


答案 1

使用FileInputStream打开文件,然后使用带有UTF-8字符集InputStreamReader从流中读取字符,并使用BufferedReader读取行,例如通过BufferedReader#readLine,这将为您提供一个字符串。获得字符串后,您可以检查是否属于您认为可打印的字符。

例如(没有错误检查),使用试用资源(在模糊的现代Java版本中):

String line;
try (
    InputStream fis = new FileInputStream("the_file_name");
    InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8"));
    BufferedReader br = new BufferedReader(isr);
) {
    while ((line = br.readLine()) != null) {
        // Deal with the line
    }
}

答案 2

虽然手动执行此操作并不难,但我会使用番石榴BufferedReaderInputStreamReader

List<String> lines = Files.readLines(file, Charsets.UTF_8);

然后,您可以使用这些行执行任何您喜欢的操作。

编辑:请注意,这将一次性将整个文件读入内存。在大多数情况下,这实际上很好 - 它肯定比逐行阅读它更简单,在阅读时处理每一行。如果这是一个巨大的文件,你可能需要按照T.J. Crowder的答案这样做。