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

原创 2012年03月23日 14:44:36

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

代码如下:

 

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;
 }

}

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

 

 

相关文章推荐

Android 5.0 Usb调试拦截分析及修改

当我们调试安卓机器时,第一次插上usb线,会弹出一个授权的对话框,(前提是打开了usb调试功能)点击确认,才会允许调试.如果我们想机器默认就可以调试该怎么做呢?如果我们想动态拦截,需要用户输入帐号密码...

EasyARM i.mx287学习笔记——minicom配置和使用

在windows中有很多串口调试软件,例如putty。而ubuntu中也有很多串口调试软件,其中最简单实用的便是minicom了。本文说明虚拟机中如何使用minicom进行串口调试,具体内容包括虚拟机...

由于工作需要,写了一个关于支持通配符的批量删除文件或文件夹

实习中,公司需要支持如下格式的删除文件: "E:\DelFIle\Test\test*.txt"或者类似的,反正带*号的删除。   话不多说直接上代码,希望你们用到的时候有个参考。 ...

linux下用通配符删除当前目录下包括子目录的相同文件

最近想把程序源码备份一下,但是每个源码目录都有*.o文件或者其他的一些编译产生的文件,不删掉这些文件的话压缩包会比较大,而且压缩时间长,也没有必要备份这些文件,但是一个个目录去删也太搞笑了。 还好f...

通配符删除文件-Java

import java.io.File; import java.util.ArrayList; import java.util.List; public class DeleteFile...
  • zzj9022
  • zzj9022
  • 2013年03月14日 12:44
  • 306

vc 支持通配符的文件删除

利用SHFileOperation实现支持通配符*,?的文件删除、拷贝、移动等。在vc6.0下测试通过。//----------------------------------------------...

一个支持通配符的文件操作类

  • 2003年10月05日 00:00
  • 2KB
  • 下载

ubuntu创建、删除文件及文件夹,强制清空回收站方法

mkdir 目录名         => 创建一个目录 rmdir 空目录名      => 删除一个空目录 rm 文件名 文件名   => 删除一个文件或多个文件 rm –rf 非空目录...

文件通配符匹配代码.txt

  • 2008年08月04日 13:35
  • 730B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:删除通配符表示的文件及文件夹
举报原因:
原因补充:

(最多只允许输入30个字)