Java语言实现目录的拷贝

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

/**
 * CopyFileFolder.java
 *
 * 编写一个程序可以拷贝文件夹
 * 1、输入要拷贝的文件夹路径
 * 2、输入要新建的文件夹的路径
 * 3、用File对象获得原文件夹下所有文件
 * 4、使用FileInputStream、FileOutputStream来实现将原文件夹下的文件内容拷贝到新文件夹下
 *
 *  Nov 6, 2012 9:31:11 PM
 *
 */
public class CopyFileFolder2 {
    static int count = 0;
    
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入你要拷贝文件夹的源路径:");
        String orignPath = input.next();
        boolean flag = true;
        
        //逻辑处理判断,你输入的路径是否存在,也即目录是否存在,不存在则重新输入
        while(flag){
            if(!(new File(orignPath)).exists()){
                flag = true;
                System.out.print("文件夹的路径不存在,请重新输入源路径名:");
                orignPath = input.next();
            }else{
                flag = false;
            }

        }
        System.out.print("请输入你要拷贝文件夹的目的路径:");
        String desPath = input.next();
        long start = System.currentTimeMillis();
        CopyFileFolder2.copyFileFolder(orignPath, desPath);
        long end = System.currentTimeMillis();
        System.out.println("你要拷贝的文件夹下面的目录以及子目录中的目录共有:"+count+"个");
        System.out.println("本次拷贝过程总共花费了:"+(end-start)+"毫秒!");
    }
    
    public static void copyFileFolder(String orignPath,String desPath){
        
        new File(desPath).mkdirs();//创建此抽象路径名指定的目录,包括所有必需但不存在的父目录
        File file = new File(orignPath);
        //拿到源路径的文件列表
        String[] strs = file.list();
        File temp = null;
        for (int i = 0; i < strs.length; i++) {
            if(orignPath.endsWith(File.separator)){
                temp = new File(orignPath+strs[i]);
            }else{
                temp=new File(orignPath+File.separator+strs[i]);
            }
            
            if(temp.isFile()){//如果是文件,就执行拷贝动作,否则就先建立相应的文件夹之后在进行相应的动作
                FileInputStream fis = null;
                FileOutputStream fos = null;
                try {
                    //拿到一个输入流,去读源文件中的内容
                    fis = new FileInputStream(temp);
                    //拿到一个输出流,将内容写进新文件中
                    fos = new FileOutputStream(desPath+"\\"+temp.getName().toString());//注意"\"也可以
                    
                    //临时存储空间,可以稍微定义的大一点,这就可以增加读写速度了,(另外说明,XP系统中的缓存是4kb)
                    byte[] tempSpace = new byte[1024];
                    int len = 0;
                    while((len=fis.read(tempSpace)) != -1){
                        fis.read(tempSpace, 0, len);//每次读入tesmSpace大小的空间
                        fos.write(tempSpace);
                    }
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }finally {
                    if(fos != null){
                        try {
                            fos.close();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                    if(fis != null){    
                        try {
                            fis.close();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
            }else{
                count++;
                copyFileFolder(orignPath+"\\"+strs[i],desPath+"\\"+strs[i]);
            }
            
        }
    }
}

posted @ 2012-11-06 23:30  bestzxl  阅读(223)  评论(0编辑  收藏  举报