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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 金肖 中级黑马   /  2012-5-22 06:29  /  1125 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 金肖 于 2012-5-22 06:42 编辑

  1. /**
  2. *         <A ><A >拷贝一个带内容的文件夹</A></A>。 例如:将D:\\itcast\\java文件夹拷贝到d盘根目录。
  3. *         思路:
  4. *                 1)定义拷贝文件的函数,接收两个文件参数(源和目标)
  5. *                 2)对源目录进行判断,不存在,抛异常,如果存在,先判断是否是文件,如果是则调用复制文件的功能
  6. *                        
  7. *                 3)如果是是目录,调用  File.listFiles()方法将文件存储进数组
  8. *                 4)遍历数组,判断文件,如果是目录,获取该文件名,在目的处创建一个,并在次掉用copyDir()的功能
  9. *                 5)如果是文件,调用copyFile()的功能对文件进行复制
  10. *         
  11. * 代码实现如下

  12. *  * @author jinxiao                        
  13. */

  14. import java.io.File;
  15. import java.io.FileInputStream;
  16. import java.io.FileOutputStream;
  17. import java.io.IOException;
  18. import java.util.Arrays;
  19. import java.util.List;

  20. public class CopyFile {
  21.         private static final int BUFFER_SIZE = 2048 * 1024;

  22.         public static void main(String[] args) throws IOException {

  23.                 File fromPath = new File("c:\\program files\\java");

  24.                 File toPath = new File("D:\\");

  25.                 copyDir(fromPath, toPath);
  26.         }

  27.         /**
  28.          * 定义功能,对目录进行拷贝
  29.          * @param fromPath
  30.          * @param toPath
  31.          * @throws IOException
  32.          */
  33.         private static void copyDir(File fromPath, File toPath) throws IOException {

  34.                 //对给定的目录进行判断,不存在,则抛出异常
  35.                 if (!fromPath.exists()) {
  36.                         throw new RuntimeException("目录不存,请重新输入!");
  37.                 }
  38.                 else if (fromPath.isFile()) {
  39.                         copyFiles(fromPath, toPath);
  40.                 } else {

  41.                         File[] files = fromPath.listFiles();  //将目录中的文件存储进数组

  42.                         for (File file : files) {             //对数组进行遍历
  43.                                 
  44.                                 
  45.                                 //对文件进行判断,如果是文件,则继续调用copyDir方法,递归
  46.                                 if (file.isDirectory()) {
  47.                                        

  48.                                         //获取文件的的绝对路径,和文件名,并封装
  49.                                         File dir = new File((toPath.getAbsolutePath() + "\\" + fromPath.getName()));

  50.                                         System.out.println(dir.getAbsolutePath());
  51.                                        
  52.                                        
  53.                                         //在目的地创建文件夹
  54.                                         dir.mkdirs();
  55.                                        

  56.                                         // 对目录进行递归,深度遍历
  57.                                         copyDir(file, dir);
  58.                                 }
  59.                                 else {
  60.                                         // 调用复制文件的功能
  61.                                         copyFiles(file, toPath);
  62.                                 }
  63.                         }
  64.                 }
  65.         }

  66.         /**
  67.          * 定义复制文件的功能
  68.          * @param sFile
  69.          * @param pFile
  70.          * @throws IOException
  71.          */
  72.         private static void copyFiles(File sFile, File pFile) throws IOException {

  73.                 FileInputStream fis = null;
  74.                 FileOutputStream fos = null;
  75.                 File fromFile = sFile.getAbsoluteFile();
  76.                

  77.                 // 创建集合,对文件的父目录进行切割,并存储进集合
  78.                 List<String> list = Arrays.asList(sFile.getParent().split("\\\\"));
  79.                

  80.                 // 获取文件的直接父目录的字符串
  81.                 String str = list.get(list.size() - 1);
  82.                

  83.                 // 获取目标的绝对路径,和文件的父目录,并在目的地创建文件夹
  84.                 new File(pFile.getAbsoluteFile() + "\\" + str).mkdirs();
  85.                

  86.                 // 获取文件上传的目的地
  87.                 String newfileName = pFile.toString() + "\\" + str;
  88.                

  89.                 // 获取文件名
  90.                 String fileName = fromFile.getName();
  91.                

  92.                 // 创建流关联文件,并写入目的地
  93.                 fis = new FileInputStream(fromFile);
  94.                 fos = new FileOutputStream(newfileName + "\\" + fileName);

  95.                 byte[] buf = new byte[BUFFER_SIZE];
  96.                 int len = 0;
  97.                 while ((len = fis.read(buf)) != -1) {
  98.                         fos.write(buf, 0, len);
  99.                 }
  100.                
  101.                 //关流
  102.                 fis.close();
  103.                 fos.close();
  104.         }
  105. }
复制代码

0 个回复

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