java删除文件支持通配符
原文: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删除文件支持通配符的更多相关文章
- Java删除文件夹和文件
转载自:http://blog.163.com/wu_huiqiang@126/blog/static/3718162320091022103144516/ 以前在javaeye看到过关于Java操作 ...
- 用java删除文件夹里的所有文件
import java.io.File; public class Test { public static void main(String args[]){ Test t = new Test() ...
- 【转】Java删除文件夹和文件
原文网址:http://kxjhlele.iteye.com/blog/323657 以前在javaeye看到过关于Java操作文件的一篇文章,写的很好,但找了半天也没找到,就把找到底几篇文章整理一下 ...
- java删除文件夹下所有文件
package org.sw; import java.io.File; /** * * @author mengzw * @since 3.0 2014-2-26 */ public class D ...
- java删除文件夹 Java中实现复制文件或文件夹
删除文件夹 import java.io.File; public class DeleteDir { /** * @param args */ public static void main(Str ...
- JAVA删除文件及文件夹
JAVA在删除文件或文件夹时,在java.io.File类下有个delete的方法,并且可以返回true or false, 用这个方法来删除单个文件时,很好使,但在删除文件夹时,如果文件夹下面有文件 ...
- java 删除文件夹 / 删除某文件夹下的所有文件
import java.io.File; /*************************删除文件夹delFolder / 删除文件夹中的所有文件delAllFile *start******** ...
- java 删除文件夹中的所有文件及文件夹
删除文件夹(前提:文件夹为空以及InputStream和OutputStream等一些数据文件流关掉[close()],否则文件无法删除) //删除文件夹 public static void del ...
- Java删除文件或目录及目录下所有文件
一直在做C++相关开发的工作.突然某一天一时兴起,想学习下Java开发.然后再网上找到一本Java简明教程,入门是够用了.看到文件IO这一章,想起之前用C++做的删除文件或目录的练习,于是打算用Jav ...
随机推荐
- JS案例六_2:省市级联动
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 在Linux CentOS6系统中安装开源CMS程序OpenCart的教程
OpenCart是一个开放源码的店面,旨在为您提供灵活和细粒度的在线店面管理.在开始之前,您应该已经在您的Linode上设置了一个LAMP堆栈.您还应该设置主机名. PHP设置 为了使用OpenCar ...
- Database First/Code First
- Ubuntu下Caffe实现物体分类
参考链接: ubuntu下配置Caffe:https://blog.csdn.net/a_z666666/article/details/72853346 https://www.cnblogs.co ...
- 为什么使用Nosql:Nosql和SQL的区别
1.概念: SQL(Structured Query Language)数据库,指关系型数据库.主要代表:SQL Server.Oracle.MySQL.PostgreSQL. NoSQL(Not O ...
- java面向对象编程--Josephu问题(丢手帕问题)
Josephu问题为:设编号为1,2,...n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推 ...
- 安装mysql5.5遇到的狗屁问题,最后还是细心一下就好
首先巩固下自己已经遗忘了一年的Mysql数据库和navicat可视化数据库,安装数据库没有具体要求直接点下一步就好,我第一次安装提示服务器名无效,后来发现了原因,mysql服务压根没有启动,也就是更直 ...
- Filter 中空指针错误
Filter 是过滤器,凡是通过servlet JSP 的请求需要filter 进行过滤或者拦截操作,保证数据的合法或者逻辑正确性 但是写第一个filter 配置完成后,发现jsp 文件进不去了,直 ...
- QTCPSOCKET 客户端已连接 而服务器无响应
最近在使用qt coding一个项目时,使用到了qtcpsocket模块来编写客户端与服务器.在windows平台下还能正常工作,但是在ubuntu平台下,客户端提示已连接时,服务器却没有响应.经过排 ...
- css中换行与不换行的样式
常见的css样式分为换行与不换行两种需求 1.不换行显示省略号 text-overflow:ellipsis; white-space:normal; 2.换行自适应 word-break: brea ...