黑马程序员技术交流社区

标题: 问个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