A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵志勇 中级黑马   /  2012-5-8 17:52  /  2366 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚才看视频文本文件读取方式二是有个小疑问:
import java.io.*;
class  FileReaderDemo2
{
public static void main(String[] args) throws IOException
{
  FileReader fr=new FileReader("demo.txt");
   char[] buf=new char [3];
   int num=fr.read(buf);
   System.out.println("num="+num+"....."+new String (buf));
   fr.close();
}
}
int num=fr.read(buf);这语句有点想不通,fr.read() 返回值类型是int .可是上边的代码运行结果是num=3。我知道这条语句记住就可以了,可是我想弄清楚,fr.read()是累加的吗?为什么?如果不是请高人指点。谢谢。

7 个回复

正序浏览
字符流的read(char[])方法的读取原理是这样的
如果数组的长度小于文件中类容的长度,则将文件中从开始到数组长度的字符存入数组,并返回从文件中读取的字符个数,也就是数组的长度。
如果数组的长度大于文件中类容的长度,则将文件中的所有数据按顺序存入数组,并返回实际读取的字符数,也就是文件中的字符个数。
如果数组的长度等于文件中类容的长度,则刚好将文件中的字符读取存入数组,返回实际读取的长度,也就是数组的长度或文件中字符的个数;
总而言之就是返回实际当中存入数组中的字符数。
字节流中的read(byte[])是一样的
回复 使用道具 举报
赵志勇 发表于 2012-5-8 18:20
fr.read()不是把读取的字符放入数组中吗?是不是fr.read()有两个功能,一个是计数,一个是读,而这两种功 ...

fr.read(buf);
加了数组参数就是把字符放入数组中,同时返回的也是数组的长度
回复 使用道具 举报
任睦强 发表于 2012-5-8 18:13
fr.read()返回的是你要读取文件里面数据的长度,如果里面文件没有你定义数组的长度大的话,则返回空,否 ...

刚实验了一下,如果里面文件没有你定义数组的长度大的话,则返回空。返回的不是空。还是数组的长度。
回复 使用道具 举报
任睦强 发表于 2012-5-8 18:13
fr.read()返回的是你要读取文件里面数据的长度,如果里面文件没有你定义数组的长度大的话,则返回空,否 ...

谢谢,明白了,言简意赅。
回复 使用道具 举报
谭景宾 发表于 2012-5-8 17:58
fr.read()返回的是读取到的个数,算是累加吧。
从数组的下标0开始读,读到多少个元素返回多少个 ...

fr.read()不是把读取的字符放入数组中吗?是不是fr.read()有两个功能,一个是计数,一个是读,而这两种功能是同时进行的。是吗?
回复 使用道具 举报
任睦强 来自手机 高级黑马 2012-5-8 18:13:08
藤椅
fr.read()返回的是你要读取文件里面数据的长度,如果里面文件没有你定义数组的长度大的话,则返回空,否则截取数组长度的内容
回复 使用道具 举报
fr.read()返回的是读取到的个数,算是累加吧。
从数组的下标0开始读,读到多少个元素返回多少个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马