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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马嘉 中级黑马   /  2014-10-27 11:29  /  2073 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

面试题,让复制一个多层文件夹。
求大神给点思路
是不是没法复制文件夹呀

15 个回复

倒序浏览
视频里有的,楼主仔细找找
回复 使用道具 举报
可以创建文件夹,判断如果是目录,就将文件名获取,用mkdirs创建子目录
回复 使用道具 举报
  1. 我在写一遍吧,写了好多遍了,这个复制文件夹和文件是需要通过File类的一个构造函数来完成的File(File dest,String  filenamae)


  2. 代码如下:
  3. import java.io.*;

  4. class CopyFiles
  5. {
  6.         private static FileInputStream fis;
  7.         private static FileOutputStream fos;
  8.         public static void main(String[] args)
  9.         {
  10.                
  11.                 //源文件夹
  12.                 File  dir = new File("C:\\java");
  13.                 //在F盘创建java文件夹
  14.                 File dest = new File("F:\\",dir.getName());
  15.                 //这一步很重要,目标文件路径不存就创建,否则会报异常
  16.                 if(!dest.exists())
  17.                         dest.mkdir();
  18.                 copy(dir,dest);
  19.         }

  20.         public static void copy(File dir,File dest){
  21.                 //列出文件夹dir下的所有目录包括文件
  22.                 File[]  files = dir.listFiles();

  23.                 for(File file : files){
  24.                         //在目标路径下先创建同名文件或者文件夹
  25.                         File newDest = new File(dest,file.getName());//这是File类的构造函数
  26.                         if(file.isDirectory()){
  27.                                 //这一步很重要,目标文件路径不存就创建,否则会报异常
  28.                                 if(!newDest.exists())
  29.                                         newDest.mkdir();
  30.                                 copy(file,newDest);
  31.                         }else{
  32.                                 try{
  33.                                         //如果是个文件就读写
  34.                                         fis =  new FileInputStream(file);
  35.                                         fos = new FileOutputStream(newDest);

  36.                                         byte[] buf = new byte[1024];
  37.                                         int len = 0;
  38.                                         while((len=fis.read(buf))!=-1){
  39.                                                 fos.write(buf,0,len);
  40.                                                 fos.flush();
  41.                                         }
  42.                                 }catch(IOException e){
  43.                                         e.printStackTrace();
  44.                                 }finally{
  45.                                         if(fis!=null){
  46.                                                 try{
  47.                                                         fis.close();
  48.                                                 }catch(IOException e){
  49.                                                         e.printStackTrace();
  50.                                                 }
  51.                                         }
  52.                                         if(fos!=null){
  53.                                                 try{
  54.                                                         fos.close();
  55.                                                 }catch(IOException e){
  56.                                                         e.printStackTrace();
  57.                                                 }
  58.                                         }
  59.                                 }

  60.                         }
  61.                 }
  62.         }
  63. }
复制代码
回复 使用道具 举报

我觉得你非常对,我也试试
回复 使用道具 举报
sk0806 发表于 2014-10-27 13:32
可以创建文件夹,判断如果是目录,就将文件名获取,用mkdirs创建子目录

谢谢你,你进黑马了吗
回复 使用道具 举报
马嘉 中级黑马 2014-10-27 15:40:56
7#
马个了黑_邓 发表于 2014-10-27 11:34
视频里有的,楼主仔细找找

谢谢你,我找到答案了
回复 使用道具 举报
马嘉 发表于 2014-10-27 15:39
谢谢你,你进黑马了吗

31号面试
回复 使用道具 举报
要抓紧复习了。
回复 使用道具 举报
马嘉 中级黑马 2014-10-28 07:56:55
10#

你准备的怎么样了,前面考得怎么样
回复 使用道具 举报
复制文件夹关键在文件的递归判断,就是递归判断是否是文件夹,是的话就在目的盘符中创建一个相关的目录,否则添加到文件复制的队列中。
回复 使用道具 举报
马嘉 发表于 2014-10-28 07:56
你准备的怎么样了,前面考得怎么样

先付费的,入学测试28.7,基础测试10分
回复 使用道具 举报
package com.vice.IO;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


/**
* 将E盘下某个文件中的全部内容(文本、MP3、文件夹等)复制到D盘下某个文件夹。

* @author Administrator
*
*/
public class IOCopy2 {

         public static void main(String[] args) {
                 
                  //源文件
                  File F1=new File("E:\\zuocao");
                  
                  //在【D:\\中联华水驱动、软件下】创建一个同名的一级目录
                  File F2=new File("D:\\中联华水驱动、软件",F1.getName());    //F1.getName()获取文件/文件夹的名称:zuocao
                  
                  //创建目标文件夹     【 判断某个文件或目录是否存在】没有就创建文件夹
                  if(!F2.exists()){   //这一步必须要有,否则系统出错-“系统找不到指定路径”
                           F2.mkdirs();
                  }
                  
              WriteReader(F1,F2);                  
         }
       
         public static void WriteReader(File F1,File F2){
                 
                     File[] fliess=F1.listFiles(); //列出 [某文件夹中] 所有文件。
                     for(File flie:fliess){
                                              //每次遍历时,都要在 目标文件夹 下【创建同名同级】文件夹或者文件
                                     File NewF2=new File(F2,flie.getName());
                                    
                                    //遍历到的文件:判断---[ 是否文件夹 或者文件 ]
                                     if(flie.isDirectory()){   //判断是否为文件夹                                             
                                                 //如果是文件夹,就在目标文件夹下创建同名同级文件夹
                                                if(!NewF2.exists()){
                                                              NewF2.mkdir();         
                                                }
                                                WriteReader(flie,NewF2);                                             
                                     }else{
                                              try {
                                                        BufferedInputStream BIS=new BufferedInputStream(new FileInputStream(flie));     //读取     输入流
                                                        BufferedOutputStream BOS=new BufferedOutputStream(new FileOutputStream(NewF2));  //写入     输出流
                                                                    
                                                                    //固定格式:
                                                                    byte[] bytes=new byte[1500];
                                                                    int len=-1;
                                                                    while((len=BIS.read(bytes))!=-1){
                                                                            BOS.write(bytes,0,len);
                                                                    }
                                                                         //关闭流
                                                                    BOS.flush();
                                                                    BIS.close();
                                                                    BOS.close();
                                                                    System.out.println("------------复制成功---------------");
                                                          } catch (FileNotFoundException e) {
                                                                       e.printStackTrace();
                                                          }catch (IOException e) {
                                                                       e.printStackTrace();
                                                          }                   
                                    }
                                      
                             
                     }
         
    }
         
}

回复 使用道具 举报
学习学习!
回复 使用道具 举报
回复 使用道具 举报
看看,视频里面的,看看吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马