java 字节批量拷贝_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();

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值