关于java 流的初级问题

 FileReader fr = new FileReader("D:\\c语言感悟.txt");
        int ch;  
        while (-1 !=(ch=fr.read())) //20行    
        {
            System.out.printf("%c", (char)ch);  
        }
        请问我将代码改成下面那样为什么输出就会出错?
        FileReader fr = new FileReader("D:\\c语言感悟.txt");
        while (-1 !=fr.read()) //20行    
        {
            System.out.printf("%c", (char)fr.Read());  
        }

        希望大家帮帮我,谢谢

fr.read执行了两次
循环体内也read了一次。

while 判断的时候就执行了一次fr。read() 到while里面的时候 已经不能fr。read了

System.out.printf("%c", (char)(fr.Read()));
这样还出错吗?

一楼正解。你的第二种写法里面,fr.read执行了两次。
while条件里面执行完成后如果到达文件尾部,再执行fr.read时就会返回-1或者抛出异常了。