黑马程序员技术交流社区

标题: 文本读取方式二小问题!! [打印本页]

作者: 涐扪①起奮乧    时间: 2013-11-9 10:48
标题: 文本读取方式二小问题!!
本帖最后由 涐扪①起奮乧 于 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, 下载次数: 5)

未命名3.jpg

作者: Mr.Z.Lee    时间: 2013-11-9 11:17
因为数组长度为4,每次只能储存四个字符,换行是因为System.out.println()造成的。
作者: dztg016383    时间: 2013-11-9 11:35
你定义的数组长度容量有限,输入太长的东西只能截取前面四个。
输入流继续读取文件,读取完前四个,然后装满了,把数组里面的东西打印到屏幕,才能继续读取。
换行什么的,就是println了,自动换行,你没有自动换行它就一行写完
作者: 中关村阿旺    时间: 2013-11-9 12:16
前面两个哥们 已经解释的很清楚了。
char[] buf = new char[4];你这句代码只定义了4个字符的缓冲区,当输入流读取完4个字符,你定义的这个缓冲区已经满了,需要将缓冲区中的内容写入出去,清空缓冲区,再继续读取。
所以,你在控制台上看到的是4个一组的数据。
至于换行,你的println()方法就是在每次写入完毕后就换行啊,有ln嘛。
作者: hel    时间: 2013-11-9 12:33
(num = fr.read(buf))!=-1)
  
这句话的意思就是将数据读到buf这个数组中,返回的num是读取的个数
比如:你有5个字符,abcde,他会读取abcd 让后在输出,读到e后边一个字符的时候返回-1
循环结束,数组中现在有e,b,c,d,因为他只读取了一个所以我们只输出一个,new String(buf,0,num)

作者: 枫儿    时间: 2013-11-9 18:17
哥们整print试试
作者: hubby    时间: 2013-11-9 18:24
因为你定义的new char只能装4个字符,然后换行是因为println。你要是去掉ln就ok了




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