1,拷贝jpg文件
public class Demo3_Copy {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("xiaoshuai.jpg"); //创建输入流对象,关联xiaoshuai.jpg
FileOutputStream fos = new FileOutputStream("copy.jpg"); //创建输出流对象,关联copy.jpg
int b;
while((b = fis.read()) != -1) { //在不断的读取每一个字节
fos.write(b); //将每一个字节写出
}
fis.close(); //关流释放资源
fos.close();
}
}
2,拷贝MP3文件
【1】字节流一次读写一个字节复制音频,效率太低
-
实现代码
public class Demo3_Copy {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("致青春.mp3"); //创建输入流对象,关联致青春.mp3
FileOutputStream fos = new FileOutputStream("copy.mp3"); //创建输出流对象,关联copy.mp3
int b;
while((b = fis.read()) != -1) { //在不断的读取每一个字节
fos.write(b); //将每一个字节写出
}
fis.close(); //关流释放资源
fos.close();
}
}
【2】一次性读,一次性写。弊端:有可能会内存溢出
-
int read(byte[] b):一次读取一个字节数组
-
write(byte[] b):一次写出一个字节数组
-
available()获取读的文件所有的字节个数
public class Demo3_Copy {
public static void main(String[] args) throws IOException {
//第二种拷贝,不推荐使用,因为有可能会导致内存溢出
FileInputStream fis = new FileInputStream("致青春.mp3"); //创建输入流对象,关联致青春.mp3
FileOutputStream fos = new FileOutputStream("copy.mp3"); //创建输出流对象,关联copy.mp3
//int len = fis.available();
//System.out.println(len);
byte[] arr = new byte[fis.available()]; //创建与文件一样大小的字节数组
fis.read(arr); //将文件上的字节读取到内存中
fos.write(arr); //将字节数组中的字节数据写到文件上
fis.close();
fos.close();
}
}
【3】自定义小数组拷贝(推荐使用)
public class Demo4_ArrayCopy {
/**
* @param args
* 第三种拷贝
* 定义小数组
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//demo1();
//demo2();
FileInputStream fis = new FileInputStream("致青春.mp3");
FileOutputStream fos = new FileOutputStream("copy.mp3");
byte[] arr = new byte[1024 * 8];
int len;
while((len = fis.read(arr)) != -1) { //如果忘记加arr,返回的就不是读取的字节个数,而是字节的码表值
fos.write(arr,0,len);
}
fis.close();
fos.close();
}
}