extends String>>();private ClassLoader classLoader = ScanningFile.class.getClassLoader();//默认使用的类加载器
private static final String STARATEGY_PATH = "com.MyUtils.file";//需要扫描的策略包名
public static voidmain(String[] args) {
ScanningFile s= newScanningFile();
s.addClass();
}/*** 获取包下所有实现了superStrategy的类并加入list*/
private voidaddClass(){
URL url= classLoader.getResource(STARATEGY_PATH.replace(".", "/"));
String protocol=url.getProtocol();if ("file".equals(protocol)) {//本地自己可见的代码
findClassLocal(STARATEGY_PATH);
}else if ("jar".equals(protocol)) {//引用jar包的代码
findClassJar(STARATEGY_PATH);
}
}/*** 本地查找
*@parampackName*/
private void findClassLocal(finalString packName){
URI url= null;try{
url= classLoader.getResource(packName.replace(".", "/")).toURI();
}catch(URISyntaxException e1) {throw new RuntimeException("未找到策略资源");
}
File file= newFile(url);
file.listFiles(newFileFilter() {public booleanaccept(File chiFile) {if(chiFile.isDirectory()){
findClassLocal(packName+"."+chiFile.getName());
}if(chiFile.getName().endsWith(".class")){
Class> clazz = null;try{
clazz= classLoader.loadClass(packName + "." + chiFile.getName().replace(".class", ""));
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println(chiFile);if(superStrategy.isAssignableFrom(clazz)){
eleStrategyList.add((Class extends String>) clazz);
}return true;
}return false;
}
});
}/*** jar包查找
*@parampackName*/
private void findClassJar(finalString packName){
String pathName= packName.replace(".", "/");
JarFile jarFile= null;try{
URL url=classLoader.getResource(pathName);
JarURLConnection jarURLConnection=(JarURLConnection )url.openConnection();
jarFile=jarURLConnection.getJarFile();
}catch(IOException e) {throw new RuntimeException("未找到策略资源");
}
EnumerationjarEntries =jarFile.entries();while(jarEntries.hasMoreElements()) {
JarEntry jarEntry=jarEntries.nextElement();
String jarEntryName=jarEntry.getName();if(jarEntryName.contains(pathName) && !jarEntryName.equals(pathName+"/")){//递归遍历子目录
if(jarEntry.isDirectory()){
String clazzName= jarEntry.getName().replace("/", ".");int endIndex = clazzName.lastIndexOf(".");
String prefix= null;if (endIndex > 0) {
prefix= clazzName.substring(0, endIndex);
}
findClassJar(prefix);
}if(jarEntry.getName().endsWith(".class")){
Class> clazz = null;try{
clazz= classLoader.loadClass(jarEntry.getName().replace("/", ".").replace(".class", ""));
}catch(ClassNotFoundException e) {
e.printStackTrace();
}if(superStrategy.isAssignableFrom(clazz)){
eleStrategyList.add((Class extends String>) clazz);
}
}
}
}
}
}