黑马程序员技术交流社区
标题:
文本读取方式二小问题!!
[打印本页]
作者:
涐扪①起奮乧
时间:
2013-11-9 10:48
标题:
文本读取方式二小问题!!
本帖最后由 涐扪①起奮乧 于 2013-11-10 13:32 编辑
import java.io.*;
class FileReaderDemo
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("D:\\jdk\\java程序\\demo.text");//与已知文件相关联
char[] buf = new char[4];//定义一个字符数组,用于存储读到的字符,它返回的是读到字符的个数
//char[] buf = new char[1024];//一般定义128的整数倍。
int num = 0;
while((num = fr.read(buf))!=-1)
{
System.out.println(new String(buf));//这样浪费资源
//System.out.println(new String(buf,0,num));
}
fr.close();
}
}
复制代码
运行结果是
昨天刚看的视频
看视频里讲的运行结果
分析没太懂,为啥我定义的数组长度为4,就4个一组返回回来,难道指针读到什么标识了,自动返回会数组头部进行下一轮的读取。还请帮忙解释
未命名3.jpg
(8.44 KB, 下载次数: 6)
下载附件
2013-11-9 10:50 上传
作者:
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