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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 涐扪①起奮乧 中级黑马   /  2013-11-9 10:48  /  1200 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 涐扪①起奮乧 于 2013-11-10 13:32 编辑
  1. import java.io.*;
  2. class FileReaderDemo
  3. {
  4.      public static void main(String[] args) throws IOException

  5.                 {
  6.                         FileReader fr = new FileReader("D:\\jdk\\java程序\\demo.text");//与已知文件相关联
  7.                         char[] buf = new char[4];//定义一个字符数组,用于存储读到的字符,它返回的是读到字符的个数
  8.                         //char[] buf = new char[1024];//一般定义128的整数倍。
  9.                         int num = 0;
  10.                         while((num = fr.read(buf))!=-1)
  11.                         {

  12.                                 System.out.println(new String(buf));//这样浪费资源
  13.                                 //System.out.println(new String(buf,0,num));
  14.                         }
  15.                         fr.close();
  16.                         
  17.                 }
  18. }
复制代码
运行结果是



昨天刚看的视频
看视频里讲的运行结果
分析没太懂,为啥我定义的数组长度为4,就4个一组返回回来,难道指针读到什么标识了,自动返回会数组头部进行下一轮的读取。还请帮忙解释

未命名3.jpg (8.44 KB, 下载次数: 6)

未命名3.jpg

评分

参与人数 1技术分 +1 收起 理由
To + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
因为数组长度为4,每次只能储存四个字符,换行是因为System.out.println()造成的。
回复 使用道具 举报
你定义的数组长度容量有限,输入太长的东西只能截取前面四个。
输入流继续读取文件,读取完前四个,然后装满了,把数组里面的东西打印到屏幕,才能继续读取。
换行什么的,就是println了,自动换行,你没有自动换行它就一行写完
回复 使用道具 举报
前面两个哥们 已经解释的很清楚了。
char[] buf = new char[4];你这句代码只定义了4个字符的缓冲区,当输入流读取完4个字符,你定义的这个缓冲区已经满了,需要将缓冲区中的内容写入出去,清空缓冲区,再继续读取。
所以,你在控制台上看到的是4个一组的数据。
至于换行,你的println()方法就是在每次写入完毕后就换行啊,有ln嘛。
回复 使用道具 举报
(num = fr.read(buf))!=-1)
  
这句话的意思就是将数据读到buf这个数组中,返回的num是读取的个数
比如:你有5个字符,abcde,他会读取abcd 让后在输出,读到e后边一个字符的时候返回-1
循环结束,数组中现在有e,b,c,d,因为他只读取了一个所以我们只输出一个,new String(buf,0,num)
回复 使用道具 举报
哥们整print试试
回复 使用道具 举报
hubby 中级黑马 2013-11-9 18:24:09
7#
因为你定义的new char只能装4个字符,然后换行是因为println。你要是去掉ln就ok了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马