关闭

删除通配符表示的文件及文件夹

487人阅读 评论(0) 收藏 举报

可以删除用通配符表示的文件及文件夹。支持多层目录,多个通配符。

代码如下:

 

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class DeleteFiles {

 public static void deletes(File fi) {
  if (fi.exists()) {
   if (fi.isFile())
     //fi.delete();
     System.out.println("删除:" + fi.getName());
   else {
    if (fi.isDirectory()) {
     File[] fis = fi.listFiles();
     for (int i = 0; i < fis.length; i++)
      deletes(fis[i]);
      //fi.delete();
      System.out.println("删除:" + fi.getName());
    }
   }
  }else
   System.out.println("文件不存在:"+fi.getAbsolutePath());
 }

 public static void deleteSigns(File mainDir, String file) { 
  String subStr = "";
  List<File> fls = new ArrayList<File>();
  int pre = file.indexOf("/");  
  if (pre > -1) {
   String dirName = file.substring(0, pre);
   subStr = file.substring(pre + 1);
   fls = find(mainDir, dirName);
   for (File f : fls) {
    if (f.isDirectory()) {
     deleteSigns(f, subStr);
    }
   }
  } else {
   fls = find(mainDir, file);
   for (File f : fls) {
    deletes(f);
   }
  }
 }

 public static List<File> find(File mainDir, String str) {
  System.out.println("当前目录" + mainDir.getAbsolutePath() + " " + str);
  File[] files = mainDir.listFiles();
  List<File> fls = new ArrayList<File>();
  int length = 0;
  int num = 0;
  int start = -1;
  int end = -1;
  length = str.length();
  start = str.indexOf("*");
  end = str.lastIndexOf("*");
  String[] ss = str.split("[*]");
  for (int i = 0; i < length; i++) {
   if ('*' == str.charAt(i)) {
    num++;
   }
  }
  //System.out.println("num---->" + num);
  switch (num) {
  case 0:
   File fff = new File(mainDir, str);
   fls.add(fff);
   //System.out.println("添加:"+fff.getName());
   break;

  case 1: // 只有一个*号的情况
   if (0 == start) { // 在开始的位置
    for (File f : files) {
     if (f.getName().endsWith(ss[1])) {
      fls.add(f);
      //System.out.println("添加:"+f.getName());
     }
    }
   } else if (length - 1 == start) { // 在结束的位置
    for (File f : files) {
     if (f.getName().startsWith(ss[0])) {
      fls.add(f);
      // System.out.println("添加:"+f.getName()+"---"+ss[0]);
     }
    }
   } else { // 在中间
    for (File f : files) {
     if (f.getName().startsWith(ss[0])
       && f.getName().endsWith(ss[1])) {
      fls.add(f);
      //System.out.println("添加:"+f.getName());
     }
    }
   }
   break;

  default: // 有两个或多个*号的情况
   if (0 == start && length - 1 == end) { // 在开始的位置和结束的位置都有*号
    for (File f : files) {
     boolean add = false;
     String name = f.getName();
     for (String s : ss) {
      int i = name.indexOf(s);
      if (i > -1) {
       name = name.substring(i + s.length());
       // System.out.println("当前:"+name);
       add = true;
      } else {
       add = false;
       break;
      }
     }
     if (add) {
      fls.add(f);
      // System.out.println("添加:"+f.getName());
     }
    }
   } else if (0 == start && length - 1 != end) { // 开始的位置有*号且结束的位置没有*号
    for (File f : files) {
     boolean add = false;
     String name = f.getName();
     if (name.endsWith(ss[ss.length - 1])) {
      for (String s : ss) {
       int i = name.indexOf(s);
       if (i > -1) {
        name = name.substring(i + s.length());
        add = true;
       } else {
        add = false;
        break;
       }
      }
      if (add) {
       fls.add(f);
       // System.out.println("添加:"+f.getName());
      }
     }
    }
   } else if (0 != start && length - 1 == end) { // 开始的位置没有*号且结束的位置有*号
    for (File f : files) {
     boolean add = false;
     String name = f.getName();
     if (name.startsWith(ss[0])) {
      for (String s : ss) {
       int i = name.indexOf(s);
       if (i > -1) {
        name = name.substring(i + s.length());
        add = true;
       } else {
        add = false;
        break;
       }
      }
      if (add) {
       fls.add(f);
       // System.out.println("添加:"+f.getName());
      }
     }
    }
   } else { // *号在中间 的情况(开始和结束都没有*号)
    for (File f : files) {
     boolean add = false;
     String name = f.getName();
     if (name.startsWith(ss[0])
       && name.endsWith(ss[ss.length - 1]))
      for (String s : ss) {
       int i = name.indexOf(s);
       if (i > -1) {
        name = name.substring(i + s.length());
        add = true;
       } else {
        add = false;
        break;
       }
      }
     if (add) {
      fls.add(f);
      // System.out.println("添加:"+f.getName());
     }
    }
   }
  }
  return fls;
 }

}

希望对大家能有所帮助,欢迎大家常来参观!

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:711次
    • 积分:15
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档