-
package com.threeti.util;
-
-
import java.io.File;
-
import java.io.FileFilter;
-
import java.io.IOException;
-
import java.net.JarURLConnection;
-
import java.net.URL;
-
import java.net.URLDecoder;
-
import java.util.ArrayList;
-
import java.util.Enumeration;
-
import java.util.LinkedHashSet;
-
import java.util.List;
-
import java.util.Set;
-
import java.util.jar.JarEntry;
-
import java.util.jar.JarFile;
-
-
-
-
-
-
-
public class ClassUtil {
-
-
public static void main(String[] args) throws Exception{
-
List<Class> classes = ClassUtil.getAllClassByInterface(Class.forName("com.threeti.dao.base.IGenericDao"));
-
for (Class clas :classes) {
-
System.out.println(clas.getName());
-
}
-
}
-
-
-
-
public static List<Class> getAllClassByInterface(Class c) {
-
List<Class> returnClassList = null;
-
-
if(c.isInterface()) {
-
-
String packageName = c.getPackage().getName();
-
-
List<Class<?>> allClass = getClasses(packageName);
-
if(allClass != null) {
-
returnClassList = new ArrayList<Class>();
-
for(Class classes : allClass) {
-
-
if(c.isAssignableFrom(classes)) {
-
-
if(!c.equals(classes)) {
-
returnClassList.add(classes);
-
}
-
}
-
}
-
}
-
}
-
-
return returnClassList;
-
}
-
-
-
-
-
-
public static String[] getPackageAllClassName(String classLocation, String packageName){
-
-
String[] packagePathSplit = packageName.split("[.]");
-
String realClassLocation = classLocation;
-
int packageLength = packagePathSplit.length;
-
for(int i = 0; i< packageLength; i++){
-
realClassLocation = realClassLocation + File.separator+packagePathSplit[i];
-
}
-
File packeageDir = new File(realClassLocation);
-
if(packeageDir.isDirectory()){
-
String[] allClassName = packeageDir.list();
-
return allClassName;
-
}
-
return null;
-
}
-
-
-
-
-
-
-
public static List<Class<?>> getClasses(String packageName){
-
-
-
List<Class<?>> classes = new ArrayList<Class<?>>();
-
-
boolean recursive = true;
-
-
String packageDirName = packageName.replace(‘.‘, ‘/‘);
-
-
Enumeration<URL> dirs;
-
try {
-
dirs = Thread.currentThread().getContextClassLoader().getResources(packageDirName);
-
-
while (dirs.hasMoreElements()){
-
-
URL url = dirs.nextElement();
-
-
String protocol = url.getProtocol();
-
-
if ("file".equals(protocol)) {
-
-
String filePath = URLDecoder.decode(url.getFile(), "UTF-8");
-
-
findAndAddClassesInPackageByFile(packageName, filePath, recursive, classes);
-
} else if ("jar".equals(protocol)){
-
-
-
JarFile jar;
-
try {
-
-
jar = ((JarURLConnection) url.openConnection()).getJarFile();
-
-
Enumeration<JarEntry> entries = jar.entries();
-
-
while (entries.hasMoreElements()) {
-
-
JarEntry entry = entries.nextElement();
-
String name = entry.getName();
-
-
if (name.charAt(0) == ‘/‘) {
-
-
name = name.substring(1);
-
}
-
-
if (name.startsWith(packageDirName)) {
-
int idx = name.lastIndexOf(‘/‘);
-
-
if (idx != -1) {
-
-
packageName = name.substring(0, idx).replace(‘/‘, ‘.‘);
-
}
-
-
if ((idx != -1) || recursive){
-
-
if (name.endsWith(".class") && !entry.isDirectory()) {
-
-
String className = name.substring(packageName.length() + 1, name.length() - 6);
-
try {
-
-
classes.add(Class.forName(packageName + ‘.‘ + className));
-
} catch (ClassNotFoundException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
}
-
}
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
-
return classes;
-
}
-
-
-
-
-
-
-
-
-
public static void findAndAddClassesInPackageByFile(String packageName, String packagePath, final boolean recursive, List<Class<?>> classes){
-
-
File dir = new File(packagePath);
-
-
if (!dir.exists() || !dir.isDirectory()) {
-
return;
-
}
-
-
File[] dirfiles = dir.listFiles(new FileFilter() {
-
-
public boolean accept(File file) {
-
return (recursive && file.isDirectory()) || (file.getName().endsWith(".class"));
-
}
-
});
-
-
for (File file : dirfiles) {
-
-
if (file.isDirectory()) {
-
findAndAddClassesInPackageByFile(packageName + "." + file.getName(),
-
file.getAbsolutePath(),
-
recursive,
-
classes);
-
}
-
else {
-
-
String className = file.getName().substring(0, file.getName().length() - 6);
-
try {
-
-
classes.add(Class.forName(packageName + ‘.‘ + className));
-
} catch (ClassNotFoundException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
}
-
}
java工具类 获取包下所有类
原文:http://blog.csdn.net/u014723529/article/details/44746529