- /**
- * 复制一个文件夹到另一个目录下.
- 复制文件夹,首先需要想到递归.因为文件夹是一个层次目录.
- 其次,如何递归呢?递归什么?当然,只有是文件夹的时候才递归,那么判断是文件夹还是文件就是必要的.是文件夹就递归,是文件就用流读写.
- 再次,文件夹的命名和文件的命名.两者都需要在旧文件名称和新文件路径命名.我们需要知道,当旧文件夹通过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() + " 拷贝完成!");
- }
- }
- }
- }
复制代码 |