使用字节缓冲流完成自定义路径下的文件的复制的方法
首先我们要知道字节缓冲流是什么
- 字节缓冲流 :
- BufferedInputStream(字节缓冲输入流)
- BufferedOutputStream(字节缓冲输出流)
给出方法:
public void copyFileWithBuffered(String srcPath, String destPath){
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
/*
1.造文件 File类的实例化 -- 指明源文件和目标文件
*/
File file1 = new File("abc.png");
File file2 = new File("abc4.png");
/*
2.造流
*/
/*
2.1造节点流
*/
FileInputStream fis = new FileInputStream(file1);
FileOutputStream fos = new FileOutputStream(file2);
/*
2.2造缓冲流
*/
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
/*
3.复制的细节: 读取, 写入
*/
byte[] buffer = new byte[5];
int len = 0;
while ((len = bis.read()) != -1) {
bos.write(buffer, 0, len);
}
}catch(FileNotFoundException e){
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}finally {
/*
4.资源关闭
要求: 先关闭外层的流,再关闭内层的流
*/
if(bos != null) {
try {
bos.close();
}catch(IOException e){
e.printStackTrace();
}
}
if(bis != null) {
try {
bis.close();
}catch(IOException e){
e.printStackTrace();
}
}
/*
说明: 关闭外层流的同时,内层流也会自动关闭,关于内层流的关闭我们可以省略
*/
// fos.close();
// fis.close();
}
}
- 这里我们只是给出了方法,并没有进行测试 ---- 后面我们给出测试
这里我们给出使用字节缓冲流完成指定路径下的文件的复制的方法的测试:
package IO流.fileinputstream;
import java.io.*;
public class Demo5 {
public void copyFileWithBuffered(String srcPath, String destPath){
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
/*
1.造文件 File类的实例化 -- 指明源文件和目标文件
*/
File file1 = new File("abc.png");
File file2 = new File("abc4.png");
/*
2.造流
*/
/*
2.1造节点流
*/
FileInputStream fis = new FileInputStream(file1);
FileOutputStream fos = new FileOutputStream(file2);
/*
2.2造缓冲流
*/
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
/*
3.复制的细节: 读取, 写入
*/
byte[] buffer = new byte[1024];
int len = 0;
while ((len = bis.read()) != -1) {
bos.write(buffer, 0, len);
}
}catch(FileNotFoundException e){
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}finally {
/*
4.资源关闭
要求: 先关闭外层的流,再关闭内层的流
*/
if(bos != null) {
try {
bos.close();
}catch(IOException e){
e.printStackTrace();
}
}
if(bis != null) {
try {
bis.close();
}catch(IOException e){
e.printStackTrace();
}
}
/*
说明: 关闭外层流的同时,内层流也会自动关闭,关于内层流的关闭我们可以省略
*/
// fos.close();
// fis.close();
}
}
public static void main(String [] args){
long start = System.currentTimeMillis();
String srcPath = "abc.png";
String destPath = "abc5.png";
new Demo5().copyFileWithBuffered(srcPath,destPath);
long end = System.currentTimeMillis();
System.out.println("复制操作花费的时间为:" + (end - start));
}
}
- 上述的main()方法就是对这个方法的测试
总结:
- 我们的BufferedOutputStream类中的flush()方法
- 这个方法作用就是清空我们的缓冲区,将我们的缓冲区中的数据全部写出
- 我们的BufferedOutputStream类中的write()方法自动调用flush()方法