package com.ym.test.file;
import java.io.*;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileDirectorySearch {
/**
*
* @param args
*/
public static void main(String[] args) {
// // TODO Auto-generated method stub
FileDirectorySearch star=new FileDirectorySearch();
// String path="d:";
// File war=new File(path);
// int count=star.findTxtFileCount(war,"exe");
// System.out.println("----: " + count);
File[] files = star.getFiles("d:/share", "*");
for(int i=0;i<files.length;i++){
System.out.println(files[i]);
}
}
/**
*
*
* @param allList
*
* @param endName
* “”
* @return
*/
public int findTxtFileCount(File allList,String endName){
//
int textCount=0;
// fileArray
File[] fileArray= allList.listFiles();
// allList 0
if(null==fileArray){
return 0;
}
//
for(int i=0;i<fileArray.length;i++){
//
if(fileArray[i].isDirectory()){
// System.out.println(" : "+fileArray[i].getAbsolutePath());
//
textCount+=findTxtFileCount(fileArray[i].getAbsoluteFile(),endName);
//
}else if(fileArray[i].isFile()){
// “”
if(fileArray[i].getName().endsWith(endName)){
//
System.out.println("exe : "+fileArray[i].getAbsolutePath());
// “”
textCount++;
}
}
}
return textCount;
}
/**
*
* @param s String
* @return File[]
*/
public static File[] getFiles(String s)
{
return getFiles("./",s);
}
/**
*
*
* @param dir String
* @param s String , *.?
* @return File[]
*/
public static File[] getFiles(String dir,String s) {
//
File file = new File(dir);
s = s.replace('.', '#');
s = s.replaceAll("#", "\\\\.");
s = s.replace('*', '#');
s = s.replaceAll("#", ".*");
s = s.replace('?', '#');
s = s.replaceAll("#", ".?");
s = "^" + s + "$";
System.out.println(s);
Pattern p = Pattern.compile(s);
ArrayList list = filePattern(file, p);
File[] rtn = new File[list.size()];
list.toArray(rtn);
return rtn;
}
/**
* @param file File
* @param p Pattern
* @return ArrayList
*/
private static ArrayList filePattern(File file, Pattern p) {
if (file == null) {
return null;
}
else if (file.isFile()) {
Matcher fMatcher = p.matcher(file.getName());
if (fMatcher.matches()) {
ArrayList list = new ArrayList();
list.add(file);
return list;
}
}
else if (file.isDirectory()) {
File[] files = file.listFiles();
if (files != null && files.length > 0) {
ArrayList list = new ArrayList();
for (int i = 0; i < files.length; i++) {
ArrayList rlist = filePattern(files[i], p);
if (rlist != null) {
list.addAll(rlist);
}
}
return list;
}
}
return null;
}
}