黑马程序员技术交流社区

标题: 帮我看一下,这段代码有什么问题吗? [打印本页]

作者: 奋斗2014    时间: 2014-6-21 10:43
标题: 帮我看一下,这段代码有什么问题吗?
        FileReader fr=null;
                //int f=0;
                try
                {
                fr=new FileReader("io.txt");
                //f=fr.read();
                while(fr.read()!=-1)
                {
                System.out.println((char)fr.read() );
                }
                }
                catch (IOException e)
                {
                        e.printStackTrace();
                }       
                finally
                {
                        try
                        {
                                fr.close();
                        }
                        catch (IOException e)
                        {
                                e.printStackTrace();
                        }                               
                }
这是这两天学习io流写的代码,按理说这个应该是循环读取所有的数据啊。但是我这边程序运行的结果,却是跳着显示的。比如,我的txt文件里面是abcd,运行结果只有bd,不知道为啥,感觉很奇葩。
作者: 师偃    时间: 2014-6-21 10:57
FileReader fr=null;
        int f=0;
        try
        {
        fr=new FileReader("D://io.txt");
        //f=fr.read();
        while((f=fr.read())!=-1)
        {
        System.out.println((char)f );改成这样就可以了
作者: 师偃    时间: 2014-6-21 11:00
while(fr.read()!=-1) read读的第一个字节是在判断
System.out.println((char)fr.read() );所以这里read输出的是第二个字节
,这样循环会跳着显示
作者: 奋斗2014    时间: 2014-6-21 11:13
师偃 发表于 2014-6-21 11:00
while(fr.read()!=-1) read读的第一个字节是在判断
System.out.println((char)fr.read() );所以这里read ...

谢谢,已经改过来了!实际上,改完以后,我没太理解,为啥我就没用变量接收而以,结果就有问题啦?虽然楼主讲的已经很好了。但是我还是不太能理解,为啥会这样!:(
作者: 倪大大    时间: 2014-6-21 13:01
因为你每写一次 fr.read() 他就已经读了一个字节
while(fr.read()!=-1) // 这里读了第一次.    比如你数据是abcd . 现在读出了a
  然后循环体内  (char)fr.read  //又调用了一次 read . 就是读下一个字节, b.
  所以你需要一个变量来存储, 然后把变量转换成(char)
作者: 奋斗2014    时间: 2014-6-21 15:12
倪大大 发表于 2014-6-21 13:01
因为你每写一次 fr.read() 他就已经读了一个字节
while(fr.read()!=-1) // 这里读了第一次.    比如你数据 ...

谢谢。讲解的很详细哦!赞一个!:hug:




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