下面是应用java实现windows中的dir/s查找的一个实例:
import java.io.file;
import java.util.regex.matcher;
import java.util.regex.matchresult;
import java.util.regex.pattern;
import java.util.regex.patternsyntaxexception;
/**
*利用java实现windows中的dir/s查找
*这里采用正则达式解决了通配符的问题,但是有一点就是不能够通过命令行传参数
*因为如果你通过命令行传数,java会自动把你的带通过的文件名,换成当前目录匹配的文件名,
*如你在命令行以这样传入:javafilesearcha*,如果当前目录下有a.jpg,a1.jpg,那么a*
*会被自动换成a.jpg,及a1.jpg,如果在当前目录下有目录,并且子目录中有a2.jpg,那这个就查
*不出来。所有现在只能通过其它的方式调用才行,而不能够通过命令行传参数
*这个可能需要拦截器才能够解决这个问题,不过,这个我不会,如果会的并且有兴趣,可以试试
*作者:blog.csdn.net/fenglibing
*注:可以直接运行该程序,不过,你最好把该程序拷到你需要的根目录下执行。
*/
publicclass filesearch {
string filename;
string currentpath;
booleanregstr;
pattern pattern;
public filesearch(string filename) {
/*********************用正则表达式解决通配符***************************/
if(filename.indexof("*")!=-1 || filename.indexof("?")!=-1) {
regstr=true;
if(filename.indexof("?")!=-1) {
filename=filename.replace("?",".{0,1}");
}
/**********因为正则表式中的'*'和dos中的功能差不多,所以不换***********/
pattern=pattern.compile(filename);
}
this.filename=filename;
file f=new file(""); //从当前路径开始查找
currentpath=f.getabsolutepath();
dosearch(currentpath);
}
privateboolean dosearch(string path) {
if(path==null)
returnfalse;
file f = new file(path);
file[] allfile = f.listfiles(); //取得??前目??下面的所有文件,?⑵浞旁谖募??到m中
int totalnum = allfile.length; //取得??前文件?a中有多少文件(包括文件?a)
int currentfile = 0;
for (currentfile = 0; currentfile < totalnum; currentfile++) {
if (!allfile[currentfile].isdirectory()) {
//如果是文件是采用??理文件的方式
if(regstr==true) {
matcher matcher=pattern.matcher(allfile[currentfile].getname());
boolean result=matcher.find();
if(result) {
system.out.println(allfile[currentfile].getabsolutepath());
}
}
elseif (allfile[currentfile].getname().equals(filename)) {
system.out.println(allfile[currentfile].getabsolutepath());
}
}
//如果是文件?a就采用?f?w??理
else {
dosearch(allfile[currentfile].getpath());
}
}
returntrue;
}
publicstaticvoid main(string[] args) {
filesearch filesearch = new filesearch("t?.jpg");
}
} |
闽公网安备 35060202000074号