A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

* 复制一个文件夹到另一个目录下.

复制文件夹,首先需要想到递归.因为文件夹是一个层次目录.
其次,如何递归呢?递归什么?当然,只有是文件夹的时候才递归,那么判断是文件夹还是文件就是必要的.是文件夹就递归,是文件就用流读写.
再次,文件夹的命名和文件的命名.两者都需要在旧文件名称和新文件路径命名.我们需要知道,当旧文件夹通过listFiles获得下一级文件时候,这时候,我们就要想到,
新文件夹和旧文件夹的路径已经相差一级了.

思考:
该题的难点就在于新旧文件和文件夹的路径层次同步问题.每当listFiles之后,新旧文件或文件夹就有了一个层次的差距,具体如何补足这一个层次差,只要知道  --
旧文件名称和新文件路径命名  -- 就可以了.

* */
public class Demo02 {
        public static void main(String[] args) throws IOException{
                File oldFile = new File("c:\\aaa");
                File newFile = new File("e:\\");
                MyCopy(oldFile,newFile);
        }
        public static void MyCopy(File oldFile,File newFile) throws IOException
        {
                if(!oldFile.exists())   //判断源文件是不是存在,如果不存在,声明.
                {
                        System.out.println("文件不存在");
                }
                //新的目录,加上旧的文件名.就成了一个新的文件.但是此时还没有具体文件.
                File f = new File(newFile.getPath() + "\\" + oldFile.getName());  
                System.out.println("f:"+f);  
                f.mkdir();   //创建新的文件夹    &&&重要的一部分.这里是建立一个具体的文件夹,此时新旧文件夹都相同了.
                File[] files = oldFile.listFiles();  //列出旧文件夹里的所有文件.
                for(File file : files)   //遍历这个文件夹里面的文件..
                {
                        if(file.isDirectory())   //如果还是文件夹,就递归.
                        {
                                MyCopy(file,f);
                        }else              //否则就可以,用IO流来读写文件了.
                        {
                                BufferedInputStream bis = new BufferedInputStream(new
                                                FileInputStream(file));
                                BufferedOutputStream bos = new BufferedOutputStream(
                                                new FileOutputStream(f.getPath() + "\\" + file.getName()));
                                int b = 0;
                                while((b= bis.read())!= -1)
                                {
                                        bos.write(b);
                                }
                                bis.close();
                                bos.close();
                                System.out.println(file.getName() + "  拷贝完成!");
                        }
                }               
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马