文件的复制大概分为五种方式,如果是文本文档可以使用字节流复制,也可以使用字符流复制
如果是复制目录,由于目录中可以存放各种类型的文件,所以最好使用字节流的方式,因为字节流可以操作包括图片、语音、视屏等各种类型的文件进行复制
一、如果是单级目录:
1.首先创建文件目录
2.遍历出源文件内容
3.创建新的文件用于接收原文件内容
4.将源文件复制到新的文件中
5.关闭流资源
<span style="font-size:12px;">public class Copy {
public static void main(String[] args) throws IOException {
method2("a", "b");
}
//给定两个目录,会把第一个目录的内容复制到第二个目录下
public static void method2(String src,String dest )throws FileNotFoundException, IOException {
File srcDIR = new File(src);
File destDIR = new File(dest);
File[] listFiles = srcDIR.listFiles();
for (File file : listFiles) {//file:老文件夹下的遍历到的这个文件
<span style="white-space:pre"> </span>//创建一个新的文件,但是里边还没有内容
File newFile = new File(destDIR,file.getName());
method(file, newFile);
}
}
//给定两个文件,会把第一个文件的内容复制到第二个文件中
public static void method(File file, File newFile)throws FileNotFoundException, IOException {
//创建字节流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
//进行文件内容的复制
byte[] bytes = new byte[1024];
int len;
while ((len=bis.read(bytes))!=-1) {
bos.write(bytes,0,len);
}
//关闭流资源
bos.close();
bis.close();
}
}</span>
二、使用递归的思想进行多级目录的复制
<span style="font-size:12px;">public class Copy {
public static void main(String[] args) throws IOException {
File srcDIR = new File("D:\\Lesson..."); //给定要被复制的多级目录
File destDIR = new File("a"); //复制到的目标文件
method(srcDIR,destDIR);
}
/*
* src:被复制的文件对象
* destDIR:目标目录
*/
public static void method(File src,File destDIR) throws IOException {
if(!destDIR.exists()) { //如果目标文件目录不存在,则创建目标目录
destDIR.mkdir();// 由于目录不能直接被创建,所以此处必须要手动创建目标目录
}
if(src.isDirectory()) {//如果是目录
File[] listFiles = src.listFiles(); //返回目录下所有文件的数组
File newDIR = new File(destDIR,src.getName()); //创建新的目录对象
newDIR.mkdir(); //创建新的目录
for (File file : listFiles) { //遍历目录下所有文件
method(file,newDIR); // 递归调用复制多级目录的方法
}
} else { //如果是文件
//创建目标文件
File newFile = new File(destDIR,src.getName());
//将形参src(被复制的文件)复制到目标文件中
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
byte[] bytes = new byte[1024];
int len;
while((len=bis.read(bytes))!=-1) {
bos.write(bytes,0,len);
<span style="white-space:pre"> </span></span><pre name="code" class="java"><span style="font-size:12px;"> <span style="white-space:pre"> </span>bos.flush();
}
bos.close();
bis.close();
}
}
}</span>
总结:多级目录的复制由于使用的是字节流,所以可以复制任何类型的文件,同时也可以进行单级目录的复制,通过不断的向上抽取封装,可以是复制文件看起来更
简单,只需给定两个文件的字符串路径即可,我想这就是面向对象思想的体现吧!