黑马程序员技术交流社区
标题:
文件输入流的读问题
[打印本页]
作者:
汤姆纳斯
时间:
2014-8-7 11:55
标题:
文件输入流的读问题
本帖最后由 汤姆纳斯 于 2014-8-7 15:12 编辑
package eday22;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStream1 {
public static void main(String[] args) throws IOException {
File file=new File("tempfile\\haha.txt");
FileInputStream fis=new FileInputStream(file);
int by=fis.read();
while(by!=-1){
System.out.println(by);//这里为什么会死循环?为什么把by初始化为0,把wihile里改成((by=fis.read())!-1)就好了?
}
}
}
复制代码
作者:
Bule丶
时间:
2014-8-7 12:42
本帖最后由 Bule丶 于 2014-8-7 12:43 编辑
上面int by=fis.read(); 如果文件有值,by就不是-1,只读了一次, 你一直while循环by!=-1 by肯定不等于-1 因为by没有重新赋值 而 while((by=fis.read())!=-1) 是进行赋值的读取操作,文件到头了最后会返回-1 ,所以你这死循环知道了不
作者:
暗夜星辰
时间:
2014-8-7 12:46
个人理解,希望对楼主有帮助!
当程序执行到int by=fis.read();这句话时,就读出了一个字符,并赋给by,而你用while(by!=-1),while语句中的条件一直成立,所以就成死循环了。之所以要把fis.read();放在while语句的判断中就是因为这样,fis一直读,while语句一直循环,循环到fis=-1,循环结束。
作者:
AEhaojiu
时间:
2014-8-7 13:00
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
所以这样写 就可以读取文件啦
作者:
star5603
时间:
2014-8-7 13:09
看lz技术分。。。这问题不应该解决不了啊。
作者:
执笔梦
时间:
2014-8-7 13:17
这问题....问得好:sleepy:
作者:
Bule丶
时间:
2014-8-7 22:50
star5603 发表于 2014-8-7 13:09
看lz技术分。。。这问题不应该解决不了啊。
我也是这么想的,多谢格子给分,10天后又加了1分技术分
作者:
Mr.高
时间:
2014-8-7 23:58
这个我已经解决了。。。其实很简单。
作者:
李林_
时间:
2014-8-8 00:34
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
作者:
阿磊
时间:
2014-8-8 08:43
瞄了下,大家都学得不错啊,学习了哈
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2