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();
}
}