黑马程序员技术交流社区
标题:
问个IO Reader问题
[打印本页]
作者:
谭荣强
时间:
2014-3-14 15:30
标题:
问个IO Reader问题
帮忙看看while循环里面的两个输出语句输出结果怎么不一样啊
import java.io.*;
class day1810
{
public static void main(String[] args)
{
//创建一个文件读取流对象,和指定名称的文件相关联。
//要保证该读取文件是已经存在的,如果不存在,报FileNotFounderException
FileReader fi=null;
try
{
fi= new FileReader("demo.txt");
int num = 0;
while ((num=fi.read())!=-1)
{
//System.out.print((char)num);
System.out.print((char)fi.read());//"demo.txt"是hahaa00000000aha
}
}
catch (Exception e)
{
System.out.println(e.toString());
}
finally
{
try
{
fi.close();
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
}
}
作者:
菠萝鱼
时间:
2014-3-14 16:49
fi.read() 没执行一次就读一次数据,在while ((num=fi.read())!=-1)中已经把数据读出来存入到num中,循环体中又调用了一次fi.read(),这次读取的值是下一个字符了。
作者:
daoyua
时间:
2014-3-14 16:53
本帖最后由 daoyua 于 2014-3-14 17:09 编辑
fi相当个指针,你第一个是num是指针,read读取的字符,你第二个输出在读取了一次,读取一次会移动一次指针,指针位置变了,当然字符就不一样了
作者:
男人丶要努力的
时间:
2014-3-14 16:54
两次调用了read()方法,所以造成值不一样
作者:
chen_x
时间:
2014-3-14 17:00
每次执行fi.read()都是读取demo.txt文件的一个字符,返回该字符,然后将读文件指针移到下一个字符处,下次再调用fi.read()就是返回这个字符,然后再将读文件指针移动一位,如此反复,直接到达文件末尾,返回-1.
你程序里while ((num=fi.read())!=-1)每次判断循环条件时fi.read()执行一次,然后 System.out.print((char)fi.read());打印时又执行了一次fi.read(), 所以最后读出来的字符是demo.txt中隔一个字符才打印一个字符,只打印奇数位(从1开始数的话)。
作者:
chen_x
时间:
2014-3-14 17:03
chen_x 发表于 2014-3-14 17:00
每次执行fi.read()都是读取demo.txt文件的一个字符,返回该字符,然后将读文件指针移到下一个字符处,下次 ...
最后一点说错了,是打印偶数位字符串(如果从1数的话)。
作者:
谭荣强
时间:
2014-3-14 18:10
懂了 谢谢各位
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2