这是我的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
UPDATE2:
还在this更大的文件上试了一下。
Java程序的输出 -
count = 20520212
输出wc命令 -
$ wc -l enwiki-20140402-stub-meta-current18.xml
20520206 enwiki-20140402-stub-meta-current18.xml
答案 0 :(得分:1)
sed '$=' vendlist.txt
生成51229(一个额外的行),而wc -l vendlist.txt
生成51228. perl -lne 'END { print $. }' vendlist.txt
生成 51229 的计数器。 cat -n vendlist.txt
生成 51229 。 最后还有一个额外的换行符。
当我尝试使用您的代码时,我使用vendlist.txt获得 51229 。使用代码here时,我得到 51228 。根据文件和程序的不同,它可能会也可能不会丢弃文件末尾的空换行符或回车符。正如我尝试的各种程序所示,所有处理新行和回车的方式都不同(至少在文件末尾时)。我没有下载任何其他测试文件。