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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如题 求解

6 个回复

倒序浏览
  1. /**
  2. * 复制一个文件夹到另一个目录下.

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

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

  12. */
  13. public class Demo02 {
  14.         public static void main(String[] args) throws IOException{
  15.                 File oldFile = new File("c:\\aaa");//旧文件夹
  16.                 File newFile = new File("e:\\");//新路径
  17.                 MyCopy(oldFile,newFile);
  18.         }
  19.         public static void MyCopy(File oldFile,File newFile) throws IOException
  20.         {
  21.                 if(!oldFile.exists())   //判断源文件是不是存在,如果不存在,声明.
  22.                 {
  23.                         System.out.println("文件不存在");
  24.                 }
  25.                 //新的目录,加上旧的文件名.就成了一个新的文件.但是此时还没有具体文件.
  26.                 File f = new File(newFile.getPath() + "\\" + oldFile.getName());  
  27.                 System.out.println("f:"+f);  
  28.                 f.mkdir();   //创建新的文件夹    &&&重要的一部分.这里是建立一个具体的文件夹,此时新旧文件夹都相同了.
  29.                 File[] files = oldFile.listFiles();  //列出旧文件夹里的所有文件.
  30.                 for(File file : files)   //遍历这个文件夹里面的文件..
  31.                 {
  32.                         if(file.isDirectory())   //如果还是文件夹,就递归.
  33.                         {
  34.                                 MyCopy(file,f);
  35.                         }else              //否则就可以,用IO流来读写文件了.
  36.                         {
  37.                                 //这里用的是字节流,用字符流 或是打印流都可以
  38.                                 BufferedInputStream bis = new BufferedInputStream(new
  39.                                                 FileInputStream(file));//读文件
  40.                                 BufferedOutputStream bos = new BufferedOutputStream(
  41.                                                 new FileOutputStream(f.getPath() + "\\" + file.getName()));//写入 新路径旧名字
  42.                                 int b = 0;
  43.                                 while((b= bis.read())!= -1)
  44.                                 {
  45.                                         bos.write(b);
  46.                                 }
  47.                                 bis.close();
  48.                                 bos.close();
  49.                                 System.out.println(file.getName() + "  拷贝完成!");
  50.                         }
  51.                 }               
  52.         }
  53. }

复制代码
回复 使用道具 举报
{:2_30:}一起学基础吧
回复 使用道具 举报
热心的同学太多了
回复 使用道具 举报
回复 使用道具 举报

还有另外一个比这个简单的题,不知道你做了没有,写给你!
题目和思路都有 你把代码写一写
*从键盘接受一个字符串,这个字符串是一个文件目录.
* 将该目录中所有的文件打印在控制台上.
*         思路:
*                 1.从键盘录入,得到一个字符串,
*                 2.通过该字符串,创建一个文件夹,
*                 3.将该文件夹进行遍历,如果还是一个文件夹,那么就进行递归,
* 否则,就将文件名称打印在控制台.
回复 使用道具 举报
嗯嗯 好的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马