Java中使用流完成文件复制以及文件夹复制

文件的复制就是读入写出,文件夹的话需要用到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:\下

你可能感兴趣的:(Java中使用流完成文件复制以及文件夹复制)