我有一个包含201288行的文本文件:
$ wc -l text_in.txt
201288 text_in.txt
我想逐行读取该文件,删除所有非字母数字字符并在新文件中打印每一行。完成后,我注意到新文件有更多行。我尝试了两件事,两者都给了我不同的结果:
PrintWriter out = new PrintWriter(fileOut);
BufferedReader br = new BufferedReader(new FileReader(fileIn));
String s;
while ((s = br.readLine()) != null)
{
out.println(s);
out.flush();
}
$ wc -l text_out.txt
201995 text_out.txt
和
try (Stream<String> stream = Files.lines(Paths.get(fileIn))) {
stream.forEach(line -> out.println(line));
} catch (IOException e) {
e.printStackTrace();
}
$ wc -l text_out.txt
201932 text_out.txt
这样做的正确方法是什么?
答案 0 :(得分:1)
这可能是由于线路编码造成的。
Unix / Linux上的 wc -l
只会匹配换行符,如果它是linux风格的行结尾(LF
)。 Java的BufferedReader.readLine()
将匹配任何可能的行结尾(CR
,LF
,CR LF
),PrintWriter.println(s)
将在平台&#39中打印出来; s默认行编码(在您的情况下为LF
),然后在下次运行时由wc -l
计算。