gpt4 book ai didi

java - 为什么 BufferedReader 读取的行数多于 wc 命令检测到的大文件行数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:45 28 4
gpt4 key购买 nike

这是我的 Java 代码,用于检测文件中的行数 -

import java.io.BufferedReader;
import java.io.FileReader;

public class CountLinesInFile {

public static int countLines(String filename) throws Exception{
BufferedReader br = new BufferedReader (new FileReader(filename));
int count = 0;
String line = null;

do {
line = br.readLine();
count++;
}
while (line!=null);

count--;
br.close();

return count;
}

public static void main(String[] args) throws Exception {

String filename;
//filename = "catalina6MB";
//filename = "catalina14MB";
filename = "catalina327MB";

int count = countLines(filename);
System.out.println("count = "+count);
}
}

当我使用较小的文件大小时,如 6MB 或 14MB,该代码给出与 wc -l 命令相同的结果。但是当我使用更大的文件 (327MB) 时,代码报告的行数略多 -

Java程序的输出-

count = 4020049

wc命令的输出-

$ wc -l catalina327MB 
4020042 catalina327MB

为什么会这样?

更新:

我在 this 上试过了在线提供的文件。

Java程序的输出-

count = 51229

wc命令的输出-

$ wc -l vendlist.txt 
51228 vendlist.txt

更新 2:

也在 this 上试过了更大的文件。

Java程序的输出-

count = 20520212

wc命令的输出-

$ wc -l enwiki-20140402-stub-meta-current18.xml 
20520206 enwiki-20140402-stub-meta-current18.xml

最佳答案

sed '$=' vendlist.txt 生成 51229(多一行),而 wc -l vendlist.txt 生成 51228。perl -lne 'END { 打印 $. }' vendlist.txt 生成 51229 的计数器。 cat -n vendlist.txt 生成 51229末尾有一个额外的换行符。

当我尝试您的代码时,我使用 vendlist.txt 得到了 51229。使用代码时 here , 我得到了 51228。根据文件和程序的不同,它可能会也可能不会丢弃文件末尾的空换行符或回车符。正如我尝试过的各种程序所示,所有程序都以不同的方式处理换行符和回车符(至少在文件末尾时)。我没有下载任何其他测试文件。

关于java - 为什么 BufferedReader 读取的行数多于 wc 命令检测到的大文件行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22846081/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com