InputStream in = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
long count = 0;
String line = br.readLine();
while (line != null) {
count += line.getBytes("UTF-8").length;
count += 1; // Add \r's length
System.out.println(Thread.currentThread() + " " + line);
System.out.println(" count:" + count);
line = br.readLine();
}
求问为什么count计算的字节数和实际的字节数不一样
解决方案 »
- 变态的需求,请高手赐教
- 求助:Spring中,想在一个工程的XML文件引用另一个工程的property文件
- 字符串操作 aa,bb,cc,dd,cc,ee,ff=猪,狗,牛,羊,虎,鼠 我想得到aa=猪 bb=狗 cc=牛 dd=羊 ee=虎 ff=鼠 怎么做 ?
- EXTJS STORE解析JSON的问题
- Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused.
- 再抛百分求解决JS问题!
- 一个Hibernate联合主键的问题
- 跪求教 字符流乱码的问题
- 请教一个小程序 (急)
- ****************深圳的大小周末制*************************
- 练习JMS,将xxx-service.xml发布到jboss的deploy目录下出错,高手来看看。
- Java 字符串 怎么去判断其中的字符是简体还是繁体?急求!!!
会把
\r
或者
\n
或者
\r\n
作为换行符,所以不一定都是+1;当然你要是得出结论是,算出来的结果比实际的要大,那么不是我说的可能性。
如果小,也许我说对了。也许你可以试试看 count += 2;
因为我的业务需要readline
文件时从linux上面弄下来的,而且我试过+2了,误差比+1要大,我想应该不是换行符的问题
你能告诉我 哪个大嘛?
实际byte和计算的比。
如果可以的话,你把你用来测的文本文件也贴出来给大家。
假如有这么个字符串“aaabbb”存在a.txt中,其中aaa和bbb有换行,就是:
aaa
bbb
这样的话你会看到此文件占用字节数为8,为什么?因为中间有个换行:正规换行时\r\n,占用了两个字节
所以就是8个字节了,而实际真正的字节数为6(不算换行的话)
所以如果你可以这么做:
假如想得到带换行的字节数(就是文件属性的那个字节数)while (line != null) {
count += line.getBytes("UTF-8").length;
count += 2; // Add \r's length
System.out.println(Thread.currentThread() + " " + line);
System.out.println(" count:" + count);
line = br.readLine();
}
if(count >=2)
{
count = count -2;//因为你多加了一行
}如果不想要换行的字节的话,可以直接将count+=2这行去掉!
Over~~~~~
测试的文本片段有8M,有60000多行,如果是换行符的问题那就不是几十KB的偏差了
楼主只是想取到文件大小的话方法很多。
File file = new File(fileName);
long count = file.length();
System.out.println(count);
如果是想知道为什么你的做法不对的话,
你可以把你的8M文件缩小点,例如只有20-30行。 试试看,如果还是不对,那么把这个缩小后的文件内容贴上来。
InputStream in = new FileInputStream(file);
System.out.println(in.available()); 也可以取到文件大小。另外,这句你肯定你的文件是utf-8的?
count += line.getBytes("utf-8").length;
也许字符集转换时,使得byte数不对了。
这么计算文件总长肯定不对。
1 搞清换行符是:"\r\n",还是"\r“,还是"\n"?
2 编码到底是utf-8还是别的。
问题已经找出来了,确实是字符集的问题,因为linux上默认的编码和测试环境默认的编码不一样,所以引起了中文解码的字节长度不一样