首先通过缓冲字节输入流和缓冲字节输出流实现文件的拷贝,然后通过File类进行文件类型的判断,最后通过递归来实现文件夹的复制。
public class DirCopy{
public static void main(String[] args){
dirCopy(new File("源文件"),new File("目标文件"));
}
//文件的拷贝
public static void fileCopy(File src,File dest){
//数据源
//创建缓冲字节输入流
BufferedInputStream bis=null;
//创建缓冲字节输出流
BufferedOutputStream bos=null;
try {
bis=new BufferedInputStream(new FileInputStream(src));
bos=new BufferedOutputStream(new FileOutputStream(dest));
//声明一个byte数组充当缓冲区
byte[] flag=new byte[4096];
//声明一个读取文件长度的整形变量
int len;
//循环读取 当值=-1时,说明文件已经读取完毕
while ((len=bis.read(flag))!=-1 ){
//写文件
bos.write(flag,0,len);
//手动刷新缓冲区
bos.flush();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
//关闭输入流
try {
//当输入流不为空的时候将其关闭
if (bis!=null)
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
//关闭输出流
try {
//当输出流不为空的时候将其关闭
if (bos!=null)
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//文件夹的拷贝
public static void dirCopy(File fileSrc,File fileDest){
//判断源文件是否存在
if(!fileSrc.exists()){
//通过控制台进行提示
System.out.println("源文件不存在:"+fileSrc.getName());
return;
}
//判断目标文件是否存在
if(!fileDest.exists()){
//不存在的话直接创建
fileDest.mkdirs();
}
//将源文件中的所有文件创建为一个文件数组
File[] files=fileSrc.listFiles();
//循环遍历源文件中的文件
for (File file:files){
//并将目标文件根目录+ 以及从源文件中获取到的文件名 进行返回
File newfile=new File(fileDest,file.getName());
//判断正在遍历的源文件是不是文件夹
if (file.isDirectory()){
//通过递归自己拷贝自己
DirCopy1(file,newfile);
}else{
//对文件进行的拷贝
fileCopy(file,newfile);
}
}
}
}