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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汤姆纳斯 高级黑马   /  2014-8-7 11:55  /  1756 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 汤姆纳斯 于 2014-8-7 15:12 编辑
  1. package eday22;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.IOException;

  6. public class FileInputStream1 {

  7.         public static void main(String[] args) throws IOException {
  8.      File file=new File("tempfile\\haha.txt");
  9.      FileInputStream fis=new FileInputStream(file);
  10.      int by=fis.read();
  11.      while(by!=-1){
  12.              System.out.println(by);//这里为什么会死循环?为什么把by初始化为0,把wihile里改成((by=fis.read())!-1)就好了?
  13.      }
  14.         }

  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 这死循环是因为by的值不等于0

查看全部评分

10 个回复

倒序浏览
本帖最后由 Bule丶 于 2014-8-7 12:43 编辑

上面int by=fis.read(); 如果文件有值,by就不是-1,只读了一次,  你一直while循环by!=-1  by肯定不等于-1  因为by没有重新赋值   而 while((by=fis.read())!=-1)  是进行赋值的读取操作,文件到头了最后会返回-1  ,所以你这死循环知道了不

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 淡定,你让他知道了

查看全部评分

回复 使用道具 举报
个人理解,希望对楼主有帮助!
当程序执行到int by=fis.read();这句话时,就读出了一个字符,并赋给by,而你用while(by!=-1),while语句中的条件一直成立,所以就成死循环了。之所以要把fis.read();放在while语句的判断中就是因为这样,fis一直读,while语句一直循环,循环到fis=-1,循环结束。

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 正解

查看全部评分

回复 使用道具 举报
FileInputStream 通过 int read() 或者 int read(byte []) 读取文件数据 如果文件读取结束则会返回-1.
(1) int by=fis.read();  fis.read()返回的是字符对应的整数值 所以可定不是-1 会出现负值
(2)为什么把by初始化为0,把wihile里改成((by=fis.read())!-1)就好了?  
通过while语句 循环执行fis.read()方法 并将读到的字符的对应的整数值返回个by 只有读到文件结束时 才会返回-1
所以这样写 就可以读取文件啦

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 正解

查看全部评分

回复 使用道具 举报
看lz技术分。。。这问题不应该解决不了啊。
回复 使用道具 举报
这问题....问得好:sleepy:

点评

你也水的好。。。  发表于 2014-8-7 18:11
回复 使用道具 举报
star5603 发表于 2014-8-7 13:09
看lz技术分。。。这问题不应该解决不了啊。

我也是这么想的,多谢格子给分,10天后又加了1分技术分
回复 使用道具 举报
这个我已经解决了。。。其实很简单。
回复 使用道具 举报
  int by=fis.read();      fis.read()  返回的是 是否有字节存在  没有则返回-1    而在这里只运行了一次 代表是有字节的
     while(by!=-1){      当by  !=-1  进入循环    当by =-1 时就退出   而在while循环体 没有迭代表达式
             System.out.println(by);//这里为什么会死循环?为什么把by初始化为0,把wihile里改成((by=fis.read())!-1)就好了?
     }

((by=fis.read())!-1)   这个的迭代表达式 就是每读一次把值给by  在判断是否等于-1
回复 使用道具 举报
瞄了下,大家都学得不错啊,学习了哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马