A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

        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 13:45

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

7 个回复

倒序浏览
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 );改成这样就可以了

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
while(fr.read()!=-1) read读的第一个字节是在判断
System.out.println((char)fr.read() );所以这里read输出的是第二个字节
,这样循环会跳着显示
回复 使用道具 举报
师偃 发表于 2014-6-21 11:00
while(fr.read()!=-1) read读的第一个字节是在判断
System.out.println((char)fr.read() );所以这里read ...

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

点评

正解。  发表于 2014-6-21 13:44
回复 使用道具 举报
倪大大 发表于 2014-6-21 13:01
因为你每写一次 fr.read() 他就已经读了一个字节
while(fr.read()!=-1) // 这里读了第一次.    比如你数据 ...

谢谢。讲解的很详细哦!赞一个!:hug:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马