练习-文件拷贝
注意,这次是小文件的拷贝
public static void main(String[] args) throws IOException {//负责原文件的读取FileInputStream fis=new FileInputStream("D:\\我的世界\\a1.txt");//负责copy文件的写出FileOutputStream fos=new FileOutputStream("D:\\我的世界\\copy.txt");int b;//记录读取内容//边读边写while ((b=fis.read())!=-1){fos.write(b);}fos.close();fis.close();}
public static void main(String[] args) throws IOException {//负责原文件的读取FileInputStream fis=new FileInputStream("D:\\我的世界\\页面返回顶部.mp4");//负责copy文件的写出FileOutputStream fos=new FileOutputStream("D:\\我的世界\\copy.mp4");int b;//记录读取内容//边读边写long l1 = System.currentTimeMillis();while ((b=fis.read())!=-1){fos.write(b);}fos.close();fis.close();long l2=System.currentTimeMillis();System.out.println(l2-l1);}
字节输入流一次读取多个字节 方法名说明
int read()
一次读取一个字节数据
int read(byte[ ] )
一次读取一个字节数组数据
注意:一次读取一个字节数组的数据,每次读取会尽可能把数组装满
所以,在创建字节数组时,一般会用1024的整数倍
1024 * 1024 * 5就是5M
public static void main(String[] args) throws IOException {//a1.txt:abcdeFileInputStream fis=new FileInputStream("D:\\我的世界\\a1.txt");byte[] arr=new byte[2];//长度为2的数组,用read读取时一次可以读取两个//读取的返回值:本次读取到了多少个字节数据int read = fis.read(arr);System.out.println(read);//而且,read用数组读取会把本次读取到的数据放到数组中String str=new String(arr);System.out.println(str);//2//abfis.close();//第二次读取便会依次向后读取两个数据,跟read没有参数时一样//结果是//2//cd//第三次读取的结果是//1//ed,因为第三次读取的时候只剩一个数据未读取,//而read方法在读取时会把数据放到数组中,每次读取都会覆盖原本的数据//所以第三次读取时只读取一个,也就只覆盖一个数据,第二个没有覆盖//也就是 ed}
e覆盖掉c,后面没有数据,所以d没有被覆盖
解决方案:
使用new 时,传递三个参数,第一个表示数组,第二个表示起始索引,第三个表示结束索引,然后会起始索引截取到结束索引
new (arr,0,len)
public static void main(String[] args) throws IOException {//a1.txt:abcdeFileInputStream fis=new FileInputStream("D:\\我的世界\\a1.txt");byte[] arr=new byte[2];//长度为2的数组,用read读取时一次可以读取两个//读取的返回值:本次读取到了多少个字节数据int read1 = fis.read(arr);System.out.println(read1);//而且,read用数组读取会把本次读取到的数据放到数组中String str1=new String(arr,0,read1);System.out.println(str1);//2//ab//第二次读取便会依次向后读取两个数据,跟read没有参数时一样int read2 = fis.read(arr);System.out.println(read2);String str2=new String(arr,0,read2);System.out.println(str2);//结果是//2//cd//第三次读取的结果是int read3 = fis.read(arr);System.out.println(read3);String str3=new String(arr,0,read3);System.out.println(str3);//1//ed,因为第三次读取的时候只剩一个数据未读取,//而read方法在读取时会把数据放到数组中,每次读取都会覆盖原本的数据//所以第三次读取时只读取一个,也就只覆盖一个数据,第二个没有覆盖//也就是 edfis.close();}
public static void main(String[] args) throws IOException {//负责原文件的读取FileInputStream fis=new FileInputStream("D:\\我的世界\\页面返回顶部.mp4");//负责copy文件的写出FileOutputStream fos=new FileOutputStream("D:\\我的世界\\copy.mp4");int b;//记录读取长度//边读边写long l1 = System.currentTimeMillis();byte[]arr=new byte[1024*1024];while ((b=fis.read(arr))!=-1){//此时每一次读取的数据在数组中fos.write(arr,0,b);//这里最后一次读取可以装不满数组,// 所以要用三个参数,表示上面有多少,就写入多少}fos.close();fis.close();long l2=System.currentTimeMillis();System.out.println(l2-l1);}
- 央视春晚,我眼中的三宗“最” 中国之最节目串词
- 新闻特写拯救“巴斯”:吉尼斯纪录背后的“世界难题” 一 吉尼斯记录心情低落
- 这5种食物是隐藏的“热量炸弹”,小心吃完伤肝脏、毁血管、减寿命 吉尼斯记录热量炸弹
- 全世界“最顶级”的啤酒,却是一群和尚酿的!看完颠覆认知 吉尼斯记录的啤酒
- 视印度女子教育为“新鲜事”的环境下,塞兰坡差会建立的女子学校 吉尼斯记录印度学校
- 十二生肖:成龙的国际影响力能有多大?一部电影让法国归还文物 吉尼斯记录成龙
- 泰勒破纪录共获29座奖杯,身披粉红战袍热辣开唱,逆天长腿太吸睛 泰勒的吉尼斯记录
- 王者荣耀:真相了,排位赛真的段位越高越好打,因为低段位事真多 王者荣耀七大历史之最
- 欧洲杯巡礼之葡萄牙:C罗最后的倔强!卫冕冠军遭法德围剿 葡萄牙欧洲杯历史之最
- 盘点那些不符合发明者想法的发明,你知道几个? 坊子历史之最是谁发明的