package org.sky.auto.intrumentation; import java.io.File; import java.util.ArrayList; import java.util.List; @Deprecated public class FileFinder { public static List<String> fileList = new ArrayList<String>(); /**返回当前项目的目录*/ public static String getProjectFile() { return System.getProperty("user.dir"); } /**返回classes的目录,里面都是class文件*/ public static String getClassFile(){ return ClassLoader.getSystemResource("").getPath(); } /** *@param f 指定的File对象 *@param suffix 指定的要查找的文件的后缀名 *@param idDepth 是否需要对子目录进行遍历 *@return 返回得到文件的list */ public static List<String> listFile(File f, String suffix, boolean isDepth) { if (f.isDirectory() && isDepth == true) { File[] t = f.listFiles(); for (int i = 0; i < t.length; i++) { listFile(t[i], suffix, isDepth); } } else { String filePath = f.getAbsolutePath(); if (suffix != null) { int begIndex = filePath.lastIndexOf("."); String tempsuffix = ""; if (begIndex != -1) { tempsuffix = filePath.substring(begIndex + 1,filePath.length()); } if (tempsuffix.equals(suffix)) { fileList.add(filePath); } } } return fileList; } /**listFile方法的补充方法 * @param path 要查找的目录地址 * @param suffix 后缀名 * @param isDepth 是否遍历子文件夹 * @return 返回文件的list * */ public static List<String> getFileList(String path, String suffix, boolean isDepth) { File file = new File(path); return FileFinder.listFile(file, suffix, isDepth); } /** * @param 目录的地址 * @param 后缀名 * @param 是否遍历子文件夹 * @return 返回不带有后缀名的文件的名字列表,如果是class不含有class的包名地址 */ public static List<String> getClassNameList(String path, String suffix,boolean isDepth) { List<?> listDir = FileFinder.getFileList(path, suffix, isDepth); List<String> listFileName = new ArrayList<String>(); for (int i = 0; i < listDir.size(); i++) { int index = ((String) listDir.get(i)).lastIndexOf(File.separator); int len = ((String) listDir.get(i)).length(); String fileNameWithsuffix = ((String) listDir.get(i)).substring(index + 1, len - suffix.length() - 1); listFileName.add(fileNameWithsuffix); } return listFileName; } /** * @param path 目录的地址 * @param suffix 后缀名 * @param 是否遍历子文件夹 * @return 如果查找的目录是class文件目录,会返回这个目录下的class文件的全名,包括包的信息都有,但是不带有class的后缀名 */ public static List<String> getPackageName(String path, String suffix, boolean isDepth) { List<?> listDir = FileFinder.getFileList(path, suffix, isDepth); List<String> listPackPathName = new ArrayList<String>(); for (int i = 0; i < listDir.size(); i++) { // int index=((String)listDir.get(i)).lastIndexOf(":"); int index = FileFinder.getProjectFile().length(); int len = ((String) listDir.get(i)).length(); String fileNameWithsuffix = ((String) listDir.get(i)).substring( index + 5, len - suffix.length() - 1).replace(File.separator, "."); listPackPathName.add(fileNameWithsuffix); } return listPackPathName; } /** * @param 目录的地址 * @param 后缀名 * @param 是否遍历子文件夹 * @return 不带路径的只返回文件的名字不带有后缀名,只是实现的方式是通过getPackageName实现的。 */ public static List<String> getOnlyClassNameByPackage(String path, String suffix, boolean isDepth) { List<String> listFileNameByPackage = new ArrayList<String>(); List<String> listPackPathName = FileFinder.getPackageName(path,suffix, isDepth); for (int i = 0; i < listPackPathName.size(); i++) { int index = listPackPathName.get(i).lastIndexOf("."); int len = listPackPathName.get(i).length(); String tempClassName = listPackPathName.get(i).substring(index + 1, len); listFileNameByPackage.add(tempClassName); } return listFileNameByPackage; } /** * @param path目录地址 * @param suffix 后缀名 * @param 是否遍历子文件夹 * @return 通过指定文件的目录,返回目录下所有文件的全路径,不包含文件名!只查出属于的path。不区分系统 * 这个方法建议不好上面的所有方法一起调用,会造成一个小bug,就是重复查找了文件,因为放在了list里面所以不会去重。 */ public static List<String> getLocationPath(String path, String suffix,boolean isDepth) { // String proDir = SKFileFinder.getProjectFile(); List<String> listPathNoName = new ArrayList<String>(); List<String> listFile = FileFinder .getFileList(path, suffix, isDepth); for (int i = 0; i < listFile.size(); i++) { int index = listFile.get(i).lastIndexOf(File.separator); String tempPathNoName = listFile.get(i).substring(0, index + 1); listPathNoName.add(tempPathNoName); } return listPathNoName; } }