黑马程序员技术交流社区

标题: 字符流读取文件的问题 [打印本页]

作者: 沙漠里的小鱼    时间: 2012-2-16 19:44
标题: 字符流读取文件的问题
FileReader in =new FileReader(f) ;         
char [] buf =new char[];
int len =in.read(buf);
System.out.println(new String(buf,o,len));为什么在一个文件中读取内容存到一个数组要in.read(buf)这样写 就是说读一个文件里的内容存到数组里面要写成文件名.read(数组名)吗  我不是很明白 谁讲讲啊 最好new String(buf,o,len)也不大理解 为什么要这样写 呢 我查看了API文档 好像没这样写法的
作者: 刘基军    时间: 2012-2-16 20:20
本帖最后由 刘基军 于 2012-2-16 20:30 编辑

参考API:
1.继承于Reader 的read方法:read
public int read(char[] cbuf)
         throws IOException将字符读入数组。在某个输入可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。

参数:
cbuf - 目标缓冲区
返回:
读取的字符数,如果已到达流的末尾,则返回 -1

2.String 的构造函数有这样的:---这样写的目的:根据实际读取的字符数len的大小来进行处理
String
public String(char[] value,
              int offset,
              int count)分配一个新的 String,它包含取自字符数组参数一个子数组的字符。offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度。该子数组的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。

参数:
value - 作为字符源的数组。
offset - 初始偏移量。
count - 长度。

3.char [] c = new char[];应该写成:char [] c = new char[1024];//需写明大小
作者: 余松霖    时间: 2012-2-16 20:22
1.为什么在一个文件中读取内容存到一个数组要in.read(buf)这样写 就是说读一个文件里的内容存到数组里面要写成文件名.read(数组名)吗

你理解错了  char [] buf =new char[];  你定义的这个char数组没有写大小。
比如你写成char [] buf =new char[1024];   int len =in.read(buf);这个意思就是说把从输入流的数据字符读入数组buf里边,最多读入1024个,返回的就是len也就是读取的个数。
new String(buf,o,len)   这是个构造方法。意思就是利用buf数组截取一个子数组创建一个新的字符串。从char数组buf里边从0角标位开始,len就是截取子数组的长度。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2