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 ...
随机推荐
- MySQL 必知必会学习笔记(常用命令一)
SHOW DATABASES;USE LangLibCEE;SHOW TABLES;SHOW COLUMNS FROM customers;DESC customers; SHOW STATUS WH ...
- Python36 二进制文件读写问题
在Python36中写如下代码: __author__ = '-------'#-*- coding: utf-8 -*-import struct fo = open("myfile.tx ...
- 团队项目需求心得——慢阻肺疾病管理APP
一.项目介绍: 先上图: 这是我们小组开发项目的系统构成图. 本项目研发面向家庭/社区,对稳定期中慢阻肺患者病情和环境全方位监测.简单病情趋势分析和患者行为干预,并且提供患者与家庭医生和专家沟通渠道的 ...
- jQuery 命名空间的使用
jQuery 命名空间的使用: 1.利用 trigger 触发子元素带命名空间的事件,那么父元素带相同命名空间的事件也会被触发,而父元素没有命名空间的事件不会被触发. 2.利用 trigger 触发子 ...
- Problem 8: Largest product in a series
先粘实现代码,以后需要再慢慢补充思路 s = ''' 73167176531330624919225119674426574742355349194934 9698352031277450632623 ...
- [server]利用python构建的服务器地址问题
http://0.0.0.0:8000/ 利用github开源项目搭建AI上色师时,遇到了建立server却无法访问的问题,ip如上. 其实很简单,0.0.0.0并不是有效的ip地址,用localho ...
- shell脚本学习总结(不断更新中)
前言:自从大学毕业参加工作以来,接触的开发工作都是在服务端完成,于是接触了比较多的Linux当做开发机使用,或多或少有一些重复性的工作,于是开始琢磨学习一些shell脚本的知识,以便处理这些繁琐的事情 ...
- [模板] 无旋Treap (C++ class)
注意!本帖不是算法介绍!只是贴代码(逃) //嫌stdlib的rand太慢,手打了一个 /* Author: hotwords */ typedef unsigned int tkey; class ...
- 使用restTemplate来访问https
1.maven: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId& ...
- Sublime使用及配置C编译器
一.环境配置 在安装了MinGW+Gcc的基础上做如下设置—— 新建编译系统c.sublime-build: { "cmd" : ["gcc", "$ ...