阅读文件提供更多行

时间:2016-01-11 12:01:18

标签: java

我有一个包含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

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这可能是由于线路编码造成的。

Unix / Linux上的

wc -l只会匹配换行符,如果它是linux风格的行结尾(LF)。 Java的BufferedReader.readLine()将匹配任何可能的行结尾(CRLFCR LF),PrintWriter.println(s)将在平台&#39中打印出来; s默认行编码(在您的情况下为LF),然后在下次运行时由wc -l计算。