黑马程序员技术交流社区

标题: 输入流和输出流的问题。(已解决) [打印本页]

作者: 韩新凯    时间: 2012-4-15 13:38
标题: 输入流和输出流的问题。(已解决)
本帖最后由 韩新凯 于 2012-4-18 15:17 编辑

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileReaderDemo2 {
        public static void main(String[] args) {
                FileReader fr = null;
                try {
                        fr = new FileReader("fw.txt");
                        char[] buf = new char[3];
/*
int num = 0;
while((num=fr.read(buf))!=-1){
        System.out.println(new String(buf,0,num));
}*/
} catch (FileNotFoundException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }

        }
}
输出正常结果,
为什么把/**/之间的代码换成
/*int num = fr.read(buf);
while(num!=-1){
        System.out.println(new Strng(buf,0,num));
}
*/
输出结果只有前面3个字符,而且还是一个死循环?
作者: 刘占月    时间: 2012-4-15 13:48
你把num = fr.read(buf) 定义在循环外边
肯定就只执行一次。

char[] buf = new char[3];
你又定义每次读三个字节 所以它就只读你输入的前三个字节。

因为num!=-1 永远不能为flase 所以是个死循环

作者: 高铭    时间: 2012-4-15 13:48
你把定义的变量num=fr.read()写在循环的外面

那么循环里的的判断条件num始终不等于-1;  也就是始终符合条件

那就肯定会一直循环下去
作者: 刘占月    时间: 2012-4-15 13:48
你把num = fr.read(buf) 定义在循环外边
肯定就只执行一次。

char[] buf = new char[3];
你又定义每次读三个字节 所以它就只读你输入的前三个字节。

因为num!=-1 永远不能为flase 所以是个死循环

作者: 韩新凯    时间: 2012-4-15 20:19
懂了,谢谢




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