读取文本文件时检查行中是否有不可打印的字符
我的程序必须逐行读取文本文件。UTF-8 格式的文件。我不确定文件是否正确 - 可以包含不可打印的字符。是否可以在不进入字节级别的情况下对其进行检查?谢谢。
我的程序必须逐行读取文本文件。UTF-8 格式的文件。我不确定文件是否正确 - 可以包含不可打印的字符。是否可以在不进入字节级别的情况下对其进行检查?谢谢。
使用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
}
}
虽然手动执行此操作并不难,但我会使用番石榴:BufferedReader
InputStreamReader
List<String> lines = Files.readLines(file, Charsets.UTF_8);
然后,您可以使用这些行执行任何您喜欢的操作。
编辑:请注意,这将一次性将整个文件读入内存。在大多数情况下,这实际上很好 - 它肯定比逐行阅读它更简单,在阅读时处理每一行。如果这是一个巨大的文件,你可能需要按照T.J. Crowder的答案这样做。