原文:https://blog.csdn.net/wdzayyt/article/details/7209530

感谢原作者

package com.covics.zfh;

import java.io.File;
import java.io.FilenameFilter;
/**
* 实现带*号的删除文件
* @author doudou
*
*/
public class TestDeleteFile { public static void main(String args[]) {
boolean delFile =
//windows
//deleteFileWithSign("E:\\fileDeleteTest\\test\\t*ve.txt");
//linux
deleteFileWithSign("/home/work/ssst*ve.txt");
System.out.println("main---->"+delFile);
} /**
* 删除带*的文件
* @param fileName
* @return
*/
public static boolean deleteFileWithSign(String fileName) {
// 文件夹名称
String dirName = "";
// 要删除的文件类型
String fileType = "";
// 不带后缀的文件名
String nameWithoutType = "";
// *号个数
int num = 0;
if (null == fileName || "".equals(fileName)) {
return false;
}
String osName = System.getProperty("os.name")
if (osName.toLowerCase().contains("windows")){
int index = fileName.lastIndexOf("\\") + 1; }else{
int index = fileName.lastIndexOf("/") + 1;
}
nameWithoutType = fileName.substring(index, fileName.lastIndexOf("."));
fileType = fileName
.substring(fileName.lastIndexOf("."), fileName.length()); dirName = fileName.substring(0, index);
File dir = new File(dirName);
System.out.println("dir:"+dir);
System.out.println("exits"+dir.exists());
System.out.println("dir.isDirectory()"+dir.isDirectory());
if (!dir.exists() || !dir.isDirectory()) {
return false;
}
// *号的位置
int start = -1, end = -1;
start = nameWithoutType.indexOf("*");
end = nameWithoutType.lastIndexOf("*"); int length = nameWithoutType.length();
for (int i=0;i<length;i++) {
if ('*' == nameWithoutType.charAt(i)) {
num++;
}
}
System.out.println("num---->"+num); // 删除的类型
int delType = 0;
switch (num) {
case 0 :
return deleteFile(fileName); case 1 : // 只有一个*号的情况
if (0==start) { // 在开始的位置
delType = 1; // 只调用endWith方法
} else if (length-1 == start) { // 在结束的位置
delType = 2; // 只调用startWith方法
} else { // 在中间
delType = 3; // 只调用contain方法
}
break; default : // 有两个或多个*号的情况
if (0 == start && length-1 == end) { // 在开始的位置和结束的位置都有*号
delType = 4; // 只调用contain方法
} else if (0 == start && length-1 != end) { // 开始的位置有*号且结束的位置没有*号
delType = 5; // 调用contain和endWith方法
} else if (0 != start && length-1 == end) { // 开始的位置没有*号且结束的位置有*号
delType = 6; // 调用startWith和contain方法
} else { // *号在中间 的情况(开始和结束都没有*号)
delType = 7; // 只调用contain方法
}
break;
} boolean flag = false;
String[] names = dir
.list(new DelFileFilter(nameWithoutType, fileType, delType));
System.out.println("names.length---->"+names.length);
for (int i = 0; i < names.length; i++) {
System.out.println("f--names-->"+dirName+names[i]);
File f = new File(dirName + names[i]);
if (!f.exists() || !f.isFile()) {
return false;
}
flag = deleteFile(f.getAbsolutePath());
if (!flag) {
break;
}
}
return flag;
} /**
* 删除单个文件
*
* @param fileName
* @return
*/
public static boolean deleteFile(String fileName) {
File file = new File(fileName);
if (file.isFile() && file.exists()) {
file.delete();
return true;
}
return false;
} /**
* 删除文件夹
*
* @param dir
* @return
*/
public static boolean deleteDir(String dir) {
// 判断是否有带文件夹符号。
if (!dir.endsWith(File.separator)) {
dir = dir + File.separator;
}
File file = new File(dir);
if (!file.isDirectory() || !file.exists()) {
return false;
}
boolean flag = true;
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) { // 删除文件
flag = deleteFile(files[i].getAbsolutePath());
if (!flag) {
break;
}
} else if (files[i].isDirectory()) { // 删除文件夹
flag = deleteDir(files[i].getAbsolutePath());
if (!flag) {
break;
}
} else {
return false;
}
}
if (file.delete()) { // 删除自身
return true;
}
return false;
}
}
/**
* FileFilter类
* 删除带*文件
* @author doudou
*
*/
class DelFileFilter implements FilenameFilter { // 传进来的文件URL
String fileName;
String fileType; // 文件类型
// 删除的类型。 1:*号在开头; 2:*号在末尾
int delType;
public DelFileFilter(String name, String fileType, int delType) {
this.fileType = fileType;
this.delType = delType;
this.fileName = name;
} @Override
public boolean accept(File dir, String name) {
// 将文件名分割顾字符串
String[] ss = fileName.split("[*]");
// 首先判断是否是要删除的文件类型
if (!isThisTypeFile(name)) {
return false;
}
boolean flag = true;
switch (delType) {
case 1 :
for (String s : ss) {
if (!"".equals(s)){
flag = endWithS(name, s);
}
}
return flag;
case 2 :
for (String s : ss) {
if (!"".equals(s)){
flag = startWithS(name, s);
}
}
return flag;
case 3 :
case 4 :
case 7 :
for (String s : ss) {
if (!"".equals(s)) {
flag = contains(name, s);
if (!flag) {
break;
}
}
}
return flag;
case 5 :
boolean flag1 = false, flag2 = false;
for (int i=0;i<ss.length;i++) {
if (!"".equals(ss[i])) {
if (i != ss.length-1 && !"".equals(ss[i])) {
flag1 = contains(name, ss[i]);
if (!flag1) {
break;
}
}
if (i == ss.length-1) {
flag2 = endWithS(name, ss[i]);
}
}
}
flag = flag1 && flag2;
return flag;
case 6 :
boolean flag3 = false, flag4 = false;
flag3 = startWithS(name, ss[0]);
for (int i=1;i<ss.length;i++) {
if (!"".equals(ss[i])) {
flag4 = contains(name, ss[i]);
if (!flag4)
break;
}
}
flag = flag3 && flag4;
return flag;
default :
flag = false;
return flag;
}
} /**
* 判断是否是该类型的文件
* @param file
* @return
*/
public boolean isThisTypeFile(String file) {
return file.toLowerCase().endsWith(fileType);
}
/**
* 包含某字符
* @param file
* @param str
* @return
*/
public boolean contains(String file, String str) {
return (file.toLowerCase().contains(str));
}
/**
* 以某字符开始
* @param file
* @param str
* @return
*/
public boolean startWithS(String file, String str) {
return file.toLowerCase().startsWith(str);
}
/**
* 以file字符结束
* @param file
* @param str
* @return
*/
public boolean endWithS(String file, String str) {
return file.toLowerCase().endsWith(str+fileType);
}
}

java删除文件支持通配符的更多相关文章

  1. Java删除文件夹和文件

    转载自:http://blog.163.com/wu_huiqiang@126/blog/static/3718162320091022103144516/ 以前在javaeye看到过关于Java操作 ...

  2. 用java删除文件夹里的所有文件

    import java.io.File; public class Test { public static void main(String args[]){ Test t = new Test() ...

  3. 【转】Java删除文件夹和文件

    原文网址:http://kxjhlele.iteye.com/blog/323657 以前在javaeye看到过关于Java操作文件的一篇文章,写的很好,但找了半天也没找到,就把找到底几篇文章整理一下 ...

  4. java删除文件夹下所有文件

    package org.sw; import java.io.File; /** * * @author mengzw * @since 3.0 2014-2-26 */ public class D ...

  5. java删除文件夹 Java中实现复制文件或文件夹

    删除文件夹 import java.io.File; public class DeleteDir { /** * @param args */ public static void main(Str ...

  6. JAVA删除文件及文件夹

    JAVA在删除文件或文件夹时,在java.io.File类下有个delete的方法,并且可以返回true or false, 用这个方法来删除单个文件时,很好使,但在删除文件夹时,如果文件夹下面有文件 ...

  7. java 删除文件夹 / 删除某文件夹下的所有文件

    import java.io.File; /*************************删除文件夹delFolder / 删除文件夹中的所有文件delAllFile *start******** ...

  8. java 删除文件夹中的所有文件及文件夹

    删除文件夹(前提:文件夹为空以及InputStream和OutputStream等一些数据文件流关掉[close()],否则文件无法删除) //删除文件夹 public static void del ...

  9. Java删除文件或目录及目录下所有文件

    一直在做C++相关开发的工作.突然某一天一时兴起,想学习下Java开发.然后再网上找到一本Java简明教程,入门是够用了.看到文件IO这一章,想起之前用C++做的删除文件或目录的练习,于是打算用Jav ...

随机推荐

  1. vmware安装CentOS开发环境搭建

    CentOS开发环境搭建 一.安装系统 新建虚拟机   2.选择“自定义(高级)”,并点击[下一步] 3.选择虚拟机硬件兼容性,并点击[下一步] 4.选择“稍后安装操作系统”,并点击[下一步] 5.选 ...

  2. shell_base

    1.使用if_then语句if command then commands fi 先运行if后面的命令,如果命令的退出状态是0(成功执行命令),就将执行then后面,fi前面的所有命令.否则就跳到fi ...

  3. HTML5 classList使用

       add:给元素添加一个指定的class var test = document.getElementById('test'); test.classList.add('yellow');//添加 ...

  4. KendoUi 学习笔记一

    本系列主要是记录KendoUI的学习过程. KendoUi的特点有以下特点: 1. 70+UI控件 控件有DataGrids,DropDowns,Menus和Buttons,还有一些商业的控件,比如C ...

  5. 20165214 2018-2019-2 《网络对抗技术》Exp3 免杀原理与实践 Week5

    <网络对抗技术>Exp3 免杀原理与实践 Week5 一.实验内容 1.正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳工具,使用shell ...

  6. c语言——单链表分拆——头插法创建链表,尾插法生成链表

    #if 1 #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; ...

  7. js string类型时间转换成Date类型

    方法一: var t = "2015-03-16";var array =  t.split("-");var dt = new Date(array[0], ...

  8. vue项目中如何使用less

    首先你的vue-cli下载完成 第一步   安装less-loader  依赖 npm  install  less less-loader  --save-dev 直接自动就配置上了,不用手动配置 ...

  9. 运动控制之一_PID控制理论

    PID算法是早期发展起来的控制算法,该算法因其简单.鲁棒性强且可靠性高而被广泛地应用于过程控制和运动控制中. 常规的PID控制系统原理框图如下所示: PID控制系统原理图 误差信号Err(t)输入到控 ...

  10. 两种语言实现设计模式(C++和Java)(四:适配器模式)

    参考:http://blog.jobbole.com/109381/ 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 系统的数 ...