- //多级文件夹的复制
- import java.io.*;
- import org.w3c.dom.ranges.RangeException;
- public class CopyDirs {
- public static void main(String[] args) {
- File source = new File("c:\\yanshi");
- File target = new File("f:\\");
- copyDir(source,target);
- }
- //定义一个方法copyDir,先建立起文件夹 如果是文件夹就继续往下查找是文件就复制
- private static void copyDir(File source,File target){
- //先进行判断,看看是不是文件夹
- if(source.isDirectory()){
- File dir = new File(target,source.getName());
- dir.mkdirs();//在F盘下已经建好了文件夹
- //文件夹建好了,现在要看看source里的东西了 呵呵,listFiles方法
- File[] files = source.listFiles();
- //哈哈 东西出来了怎么办,必须遍历啊 增强for循环出场
- for(File file:files){
- //这时候要查看每个file是文件还是文件夹 继续调用copyDir 所谓递归是也
- copyDir(file,dir);
- }
- }else{
- //如果是文件怎么办呢,好办啊,创建一个复制文件file的方法
- File file = new File(target,source.getName());
- copyFile(source,file);
- }
- }
- //定义一个复制文件的方法 因为不晓得文件是啥类型的所以选字节流
- private static void copyFile(File source,File file){
- FileInputStream fis= null;
- FileOutputStream fos = null;
- //要处理异常喽
- try {
- fis = new FileInputStream(source);
- fos = new FileOutputStream(file );
- //定义一个字符数组缓存 这样效率更高
- byte[] bytes = new byte[1024];
- int len = 0 ;
- while((len = fis.read(bytes))!=-1){
- fos.write(bytes ,0,len);
- }
- //剩下的都是无脑异常处理及关流了
- } catch (Exception e) {
- e.printStackTrace();
- throw new RuntimeException("复制多级文件夹失败");
- }finally{
- try {
- if(fos!=null)
- fos.close();
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- try {
- if(fis!=null)
- fis.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
复制代码
希望对你能有帮助 |