原文: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. 14. Longest Common Prefix ★

    题目内容:Write a function to find the longest common prefix string amongst an array of strings 题目分析:本题目利 ...

  2. 本周HTML5的知识点

    html5一般用<meta>标签描述网页的摘要信息.标题标签一共有6个,标题字体加粗<h1>最大,<h6>最小. <p>标签标示内容都在一行显示,结束后 ...

  3. css a的伪类顺序

    a:link {color: #FF0000} /* 未访问的链接 */ a:visited {color: #00FF00} /* 已访问的链接 */ a:hover {color: #FF00FF ...

  4. Java IO总结

  5. Spring Boot 整合JDBCTemplate

    1. 首先配置pom.xml 1.1 dbcm2 是数据源类型,表示配置dataSource的方式 1.2 spring-boot-starter-jdbc是表示让spring boot 支持jdbc ...

  6. stylus导入时 报错These relative modules were not found

    These relative modules were not found: * ./star48_@2x.png in ./node_modules/_css-loader@0.28.7@css-l ...

  7. CenOS 更换yum源

    说明: 更换CentOS yum源既是修改配置文件/etc/yum.repos.d/CentOS-Base.repo. 目前有很多公司都提供yum源文件的下载,所以我们可以不需要去修改这个文件,直接从 ...

  8. C#获取本地磁盘信息【转载】

      直接上干货简单易懂 //磁盘监控(远程/本地)//需要引用System.Management.dllpublic class RemoteMonitoring{private static str ...

  9. 转载 * jQuery实现动态分割div—通过拖动分隔栏实现上下、左右动态改变左右、上下两个相邻div的大小

    由jQuery实现上下.左右动态改变左右.上下两个div的大小,需要自己引入jquery1.8.0.min.js包 可用于页面布局. //============================ind ...

  10. python之路之简单介绍:

    python介绍: a. python 基础 - 基础 - 基本的数据类型 - 函数 - 面向对象 python 安装 python 安装在os上 执行操作: 写一个文件,文件中按照python规则写 ...