java中的字节IO流拷贝文件的三种方法

java中IO流概述及其分类
* 1.概念
    * IO流用来处理设备之间的数据传输
    * Java对数据的操作是通过流的方式
    * Java用于操作流的类都在IO包中
    * 流按流向分为两种:输入流,输出流。
    * 流按操作类型分为两种:
        * 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
        * 字符流 : 字符流只能操作纯字符数据,比较方便。
* 2.IO流常用父类
    * 字节流的抽象父类:
        * InputStream 
        * OutputStream
    * 字符流的抽象父类:
        * Reader 
        * Writer 

IO流拷贝文件的三种方式

package demo19;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo3__IOliu {
	
	/* 每种方法都会有异常,因为读取的文件或者路径可能不存在 ,所以主函数也要有抛出异常*/
	public static void main (String[] args) throws IOException  {
		//demo1();     //拷贝的第一种方法
		//demo2();    //拷贝的第二种方法
		 demo3();     //拷贝第三种方法
		
	}
	/* 第三种拷贝方法,推荐使用*/
	public static void demo3() throws FileNotFoundException, IOException {
		/* 创建输入流对象,并关联文件,路径可为绝对路径和相对路径 */
		FileInputStream fis = new FileInputStream("D:\\致青春.mp3"); 	
		/* 创建输出流对象,并关联文件,路径可为绝对路径和相对路径 */
		FileOutputStream fos =new FileOutputStream("D:\\致青春cop.mp3");
		

		byte[] arr = new byte[1024 * 8];    //一次性获取1024*8 bit= 8K 的字节大小
		int len;                          /* len为读取的长度 */
		while((len = fis.read(arr)) != -1) {	//如果忘记加arr,返回的就不是读取的字节个数,而是字节的码表值
			fos.write(arr,0,len);
		}
		
		fis.close();                 //关流释放资源
		fos.close();
	}

	/* 第二种拷贝方法,不推荐使用,当文件过大时,有可能会导致内存溢出 */
	public static void demo2() throws FileNotFoundException, IOException {
		/* 创建输入流对象,并关联文件,路径可为绝对路径和相对路径 */
		FileInputStream fis = new FileInputStream("D:\\致青春.mp3"); 	
		/* 创建输出流对象,并关联文件,路径可为绝对路径和相对路径 */
		FileOutputStream fos =new FileOutputStream("D:\\致青春cop.mp3");
		
		 int len = fis.available();    //获取文件大小的字节数
		 byte[] array =new byte[fis.available()];   //创建文件大小的字节数组
		 
		 fis.read(array);        //一次性读取到数组中  //将文件上的字节读取到内存中
		 fos.write(array);       //一次性写出  //将字节数组中的字节数据写到文件上
		 
		 fis.close();				//关流释放资源
		 fos.close();
	}

	/* 第一种方法
	 * read()方法读取的是一个字节,并返回是int,而不是byte。
	 * 这里要抛出异常,因为读取的文件或者路径不存在 
	 * 这里第一种方法每次读取一个字节,将输入流对象写出到输出流
	 * 这种方法速度慢,浪费时间
	 * */
	public static void demo1() throws IOException  {
		/* 创建输入流对象,并关联文件,路径可为绝对路径和相对路径 */
		FileInputStream fis = new FileInputStream("D:\\致青春.mp3"); 
		
		/* 创建输出流对象,并关联文件,路径可为绝对路径和相对路径 */
		FileOutputStream fos =new FileOutputStream("D:\\致青春cop.mp3");
		int b;
		
		/* 逐个获取流的每一个字节 ,当等于-1时,文件读取完毕 */
		while(( b=fis.read() )!=-1) {
			fos.write(b);             //将每一个字节写出
		}
		
		fis.close();				//关流释放资源
		fos.close();
	}
}

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值