菜鸟学习之路
public class Test {
public static List findFiles(String baseDirName,String targetFileName){
List fileList=new ArrayList();
File baseDir=new File(baseDirName);
if(!baseDir.exists()||!baseDir.isDirectory()){
System.out.println("文件查找失败");
return fileList;
}
String tempName=null;
Queue queue=new LinkedList<File>();
queue.add(baseDir);
System.out.println(baseDir.getAbsolutePath());//这里这里
File tempFile=null;
while(!queue.isEmpty()){
tempFile=(File)queue.poll();
if(tempFile.exists()&&tempFile.isDirectory()){
File[] files=tempFile.listFiles();
for(int i=0;i<files.length;i++){
if(files[i].isDirectory())
queue.add(files[i]);
else {
tempName=files[i].getName();
if(Test.wildcardMatch(targetFileName,tempName)){
fileList.add(files[i].getAbsoluteFile());
}
}
}
}
}
return fileList;
}
private static boolean wildcardMatch(String pattern,String str){
int patternLength=pattern.length();
int strLength=str.length();
int strIndex=0;
char ch;
for(int patternIndex=0;patternIndex<patternLength;patternIndex++){
ch=pattern.charAt(patternIndex);
if(ch=='*'){
while(strIndex<strLength){
if(wildcardMatch(pattern.substring(patternIndex+1),str.substring(strIndex)))
return true;
strIndex++;
}
}else if (ch=='?'){
strIndex++;
if (strIndex>strLength)
return false;
}else {
if(strIndex>=strLength||ch!=str.charAt(strIndex))
return false;
strIndex++;
}
}
return (strIndex==strLength);
}
public static void main(String[] args){
List resultList=Test.findFiles("E:","*.txt");
for(int i=0;i<resultList.size();i++)
System.out.println(resultList.get(i));
}
}
以上代码是照着原书打的
为何不能搜索磁盘目录(“E:” 会定位到当前包路径,搜索却是正常的 ),一定要输入磁盘下的子目录才行(”E:\Java“ 一切正常)
如果是别的盘(“D:” 就会输出 “D:\” 为何会有 "\" 啊啊啊啊,然后抛出异常),别的盘下的子目录也一切正常。