文件的复制就是读入写出,文件夹的话需要用到File类的方法,然后配合文件的复制一起完成
我们可以先封装一个复制文件的类,然后在封装一个复制文件夹的类,要复制时可以直接调用
先上代码:
public class CopyUtils {
//静态方法
public static void copyFile(String src,String dest){
copyFile(new File(src),new File(dest));
}
//方法重载,参数为String和File类型都可以
public static void copyFile(File src,File dest){
//1.选择流
InputStream is=null;
OutputStream os=null;
try{
is = new FileInputStream(src);
os = new FileOutputStream(dest);
//2.读入.写出
byte[] car=new byte[1024];
int len=-1;
while((len=is.read(car))!=-1){
os.write(car,0,len);
}
//3.刷出
os.flush();
}catch(FileNotFoundException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//4.关闭
//后打开的先关闭
try {
if(os!=null){
os.close();
}
if(is!=null){
is.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
上面就封装好了文件的复制,下面进行文件夹的复制:
public class CopyDir {
//静态方法
public static void copyDir(String src,String dest){
File srcFile=new File(src); //根据String类型路径创建源路径File对象
File destFile=new File(dest,srcFile.getName()); //创建目标路径File对象
copyDetails(srcFile,destFile);
}
//实现拷贝细节的方法
public static void copyDetails(File src,File dest){
if(src.isFile()){ //如果源路径就是一个文件
if(!dest.getParentFile().exists()){
//如果目表路径的父目录不存在,取反,则为true,需要创建
dest.getParentFile().mkdirs();
}
CopyUtils.copyFile(src, dest); //调用前面封装的复制文件的功能
}else{
//如果是文件夹,先创建文件夹
dest.mkdirs();
//遍历原文件夹中的内容,如果是文件则复制,如果是文件夹,创建,遍历...
File[] files=src.listFiles();
for(File srcFile:files){
//递归
copyDetails(srcFile,new File(dest,srcFile.getName()));
}
}
}
}
这样文件夹的复制也封装好了,在需要调用的地方调用就可以了
public class Test {
public static void main(String[] args) {
String src="D:/BBB";
String dest="E:/";
CopyDir.copyDir(src,dest);
}
}
上面测试类就可以把D:\BBB及其子文件复制到E:\下