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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 354620815 中级黑马   /  2014-10-19 22:35  /  845 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.itheima;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;

  6. /*
  7. * 复制、删除、剪切、文件夹
  8. *
  9. * File对象可以是一个已存在的文件,也可以是一个不存在的文件.
  10. * new 一个 File 对象只是创建一个文件对象, 不等于创建一个文件
  11. *
  12. */
  13. public class FFFF {

  14.         public static void main(String[] args) throws IOException {
  15.                
  16.                 File dir = new File("123");
  17.                 File dir2 = new File("C:\\000");               
  18. //                copy(dir,dir2);
  19. //                delectDir(dir);
  20.                 cut(dir2,dir);               
  21.         }               
  22.         /**
  23.          * 删除指定文件夹...:从里往外删...
  24.          *
  25.          * 思路:
  26.          *                 接收一个文件对象,判断文件是否存在
  27.          *                 如果是文件直接删除
  28.          *                 如果是文件夹就获取文件夹里面的文件列表
  29.          *                 遍历文件列表,如果碰到文件夹就开始递归了
  30.          *                 先删除里面的文件,再删除文件夹
  31.          *
  32.          * @param dir         要删除的文件夹
  33.          * @return                是否删除成功
  34.          */
  35.         private static boolean delectDir(File dir) {

  36.                 if (!dir.exists()) throw new RuntimeException("文件不存在");

  37.                 if (dir.isFile()) return dir.delete();               

  38.                 File[] files = dir.listFiles();
  39.                 for (File file : files) {
  40.                         if (file.isDirectory())        delectDir(file);
  41.                         file.delete();
  42.                 }
  43.                 return dir.delete();
  44.         }       
  45.         /**
  46.          * 复制文件夹中的所有文件,到指定的文件夹中.
  47.          *
  48.          * 从外往里复制
  49.          *
  50.          * 思路:
  51.          *                 接收两个文件对象,一个是源文件夹,一个是目的地的。
  52.          *                 获取源文件夹的所有文件列表                        
  53.          *                 遍历文件列表,如果是文件夹,就在目的地对应的目录下创建一个同名的文件夹...
  54.          *                 如果是文件的话,就要使用IO流复制.
  55.          *                
  56.          *                 复制文件夹使用复制文件夹的方法,文件夹里面可能还有文件夹还是使用复制文件夹的方法
  57.          *                 因为功能重复,所有可以使用递归.
  58.          *
  59.          * @param oldPath   要复制的文件夹
  60.          * @param newPath        复制到哪个文件夹       
  61.          * @throws IOException
  62.          */
  63.         private static void copy(File oldPath, File newPath) throws IOException {
  64.                                
  65.                 if (!oldPath.exists())
  66.                         throw new RuntimeException("文件不存在");               
  67.                 // 如果重名
  68.                 if (oldPath.getAbsolutePath().equals(newPath.getAbsolutePath()))
  69.                         newPath = new File(newPath.getAbsolutePath() + " - 副本");               
  70.                
  71.                 if (!newPath.exists())        newPath.mkdir();
  72.                
  73.                 if (oldPath.isFile()) {
  74.                         copyFile(oldPath,new File(newPath, oldPath.getName())); // ↓↓↓↓↓↓
  75.                         return;
  76.                 }
  77.                
  78.                 copyFunc(oldPath, newPath); // ↓↓↓↓↓↓
  79.         }
  80.         /**
  81.          * 复制文件夹的递归方法
  82.          * @param oldPath         要复制的文件夹
  83.          * @param newPath        复制到哪个文件夹
  84.          * @throws IOException
  85.          */
  86.         private static void copyFunc(File oldPath, File newPath) throws IOException {

  87.                 File[] files = oldPath.listFiles();

  88.                 for (File file : files) {

  89.                         if (file.isDirectory()) {
  90.                                
  91.                                 File newDir = new File(newPath, file.getName());
  92.                                 newDir.mkdirs();
  93.                                 copyFunc(file, newDir);                               
  94.                         } else {
  95.                                 copyFile(file,new File(newPath, file.getName())); // ↓↓↓↓↓↓
  96.                         }
  97.                 }
  98.         }
  99.         /**
  100.          * IO复制文件的方法
  101.          * @param from         源文件
  102.          * @param to        目的地
  103.          * @throws IOException
  104.          */
  105.         private static void copyFile(File from, File to) {

  106.                 FileInputStream fis = null;
  107.                 FileOutputStream fos = null;

  108.                 try {
  109.                        
  110.                         fis = new FileInputStream(from);
  111.                         fos = new FileOutputStream(to);

  112.                         byte[] buf = new byte[1024];
  113.                         int len = 0;

  114.                         while ((len = fis.read(buf)) != -1) {
  115.                                 fos.write(buf, 0, len);
  116.                         }
  117.                        
  118.                 } catch (IOException e) {
  119.                        
  120.                         throw new RuntimeException(e);                       
  121.                 } finally {

  122.                         if (fis != null)
  123.                                 try {
  124.                                         fis.close();
  125.                                 } catch (IOException e) {
  126.                                         throw new RuntimeException(e);
  127.                                 }

  128.                         if (fos != null)
  129.                                 try {
  130.                                         fos.close();
  131.                                 } catch (IOException e) {
  132.                                         throw new RuntimeException(e);
  133.                                 }
  134.                 }
  135.         }       
  136.         /**
  137.          * 剪切文件夹
  138.          * 先复制,后删除
  139.          * 其实应该复制一个删一个
  140.          * @param dir
  141.          * @param dir2
  142.          * @throws IOException
  143.          */
  144.         private static void cut(File oldPath, File newPath) throws IOException {
  145.                 copy(oldPath, newPath);
  146.                 delectDir(oldPath);
  147.         }
  148. }
复制代码


0 个回复

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