获取文件中字符数的问题

时间:2014-07-03 09:34:46

标签: java file

我不明白为什么第一个变种正在起作用,第二个变种不起作用。

BufferedReader reader = new BufferedReader(new InputStreamReader(in, charsetName));
try {            
    char[] buffer = new char[4096];
    reader.read(buffer, 0, 4096);
    return new String(buffer);
} finally {
    reader.close();
}

BufferedReader reader = new BufferedReader(new InputStreamReader(in, charsetName));
try {
    int size = 0;
    int ch=0;
    while ((ch=reader.read())!=-1){
        size++;
    }
    char[] buffer = new char[size];
    reader.read(buffer, 0, size);
    return new String(buffer);
} finally {
    reader.close();
}

2 个答案:

答案 0 :(得分:3)

首先,两个的代码段都被破坏了。您没有注意到返回值,而是在调用read。可能有更多的数据需要读取,并且很可能没有填充缓冲区......但是你仍然使用整个缓冲区。

接下来,您的第二段代码正在阅读内容的结尾...然后尝试阅读更多内容。那不行。

我强烈建议您自己放弃这样做,并使用来自Files.toString(File, Charset)Guava之类的内容。这里没有必要重新发明轮子,如果 希望重新发明它,你需要改变很多代码。 (我可能从头开始......)

答案 1 :(得分:1)

BufferedReader在文件中使用一种指针来定位他应该读取的位置,只要我们调用read(*)方法,这个指针就会改变。所以在你的情况下,第二个想要什么都不读,因为指针已到达文件的末尾。