为什么我在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();
}
}
}
正在回答
是的,循环外也是读了一次,读了1024个字节,所以将你one.txt的数据都读取了,建议你将byte数组的长度改为10,并确保one.txt的字节数大于10,再试试,祝学习愉快~
你好同学,如下图所示,我刚刚debug了一下,如果你在while循环外读取缓存流的话,那么while循环内,n的值则为-1,这里n的值为读写硬盘次数,所以什么都写不进去,祝学习愉快~

- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星