为什么我在while前加了一句bis.read(b);就写不进去了,拿掉就可以,这是为什么?

为什么我在while前加了一句bis.read(b);就写不进去了,拿掉就可以,这是为什么?

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;


public class CopyTxt {

//使用Bufferded复制文件信息

public static void main(String[] args) {

try {

BufferedInputStream bis=new BufferedInputStream(new FileInputStream("E:\\one.txt"));

BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("E:\\oneCopy.txt"));

int n;

byte[] b = new byte[1024];

bis.read(b);

while((n=bis.read(b))!=-1) {

bos.write(b,0,n);

}

bos.flush();

bis.close();

bos.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}


}


}


正在回答

登陆购买课程后可参与讨论,去登陆

3回答

是的,循环外也是读了一次,读了1024个字节,所以将你one.txt的数据都读取了,建议你将byte数组的长度改为10,并确保one.txt的字节数大于10,再试试,祝学习愉快~

chrismorgen 2019-02-20 11:29:12

你好同学,如下图所示,我刚刚debug了一下,如果你在while循环外读取缓存流的话,那么while循环内,n的值则为-1,这里n的值为读写硬盘次数,所以什么都写不进去,祝学习愉快~

http://img1.sycdn.imooc.com//climg/5c6cc79a00018d3c16480621.jpg

  • atss #1
    while外面只有一行代码表示读出,也算是循环吗
    2019-02-20 15:44:07
atss 2019-02-20 11:26:48

可以看看是不是因为文件太小,一次就读完了所以while里面的循环体没有运行

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师