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 ...
随机推荐
- AStar算法()
把网上的AStar算法的论述自己实现了一遍,一开始只是最基础的实现.当然,现在AStar算法已经演变出了各种优化的版本,这篇也会基于各种优化不断的更新. 如果对算法不熟悉可以看下Stanford的这篇 ...
- App测试之Monkey压力测试
- sed 命令简介
sed 默认把文件内容全部显示出来(擅长取行 替换) 参数如下: - n 取消默认输出 一般与P一起使用 查看内容‘10,20p’ 显示10-20 行的内容 - i 修改文件内容 - i.bak ...
- sqlloader 往数据库导数据提示数据文件的字段超出最大长度
当我们用sqlloader往数据库导数据提示被拒绝,数据文件的字段超出最大长度.但是我们不管怎么改提示字段的长度的时候仍然提示超出最大长度. 这个是因为ctl文件中默认为char256,超过256需要 ...
- JavaScript学习摘要
JavaScript的历史 1. css3在css2的基础上添加样式 可以做动画 也可以配合js操作2. h5在html4.01的基础上添加高级标签3. jQuery是JavaScript的封装4. ...
- Intellij IDEA 导入Maven项目
本人一直使用的eclipse, 但都说IDEA 是java界中最好使用的编辑器 ,所以开始了IDEA的学习,最近使用到了 IDEA 但是,既然编辑器有所差别,所以在使用过程中也难免遇到一些费劲的事情. ...
- 关于windows映射网络驱动器,登录时重新连接
如果想登录系统后映射盘符还在,但是不自动连接,则参考下面方法.方法其实很简单,关键的步骤是:登录共享的时候,登录界面取消选中“保存凭据”,然后映射的时候,选择“下次开机是重新连接” 这样,下次开机的时 ...
- unsigned long long类型与long long类型
最近做题的时候,经常遇到范围是2^63,取模2^64的这种题目.遇到这种限制条件时就要想到用unsigned long long类型. 可以简洁地声明为typedef unsigned long lo ...
- 马凯军201771010116《面向对象与程序设计Java》第九周学习总结
一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3 ...
- 原生JS和jQuery操作DOM的区别小结
一.Js原生对象和jQuery实例对象的相互转化: (1).原生JS对象转JQ对象: $(DOM对象); (2). JQ对象转原生JS对象: $(DOM对象).get(index); //注意区分eq ...