`
jiahh
  • 浏览: 38599 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

查找接口类对应包下的所有类ClassUtil

 
阅读更多
package com.corejava.model.abstractmodel.util;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import com.corejava.model.abstractmodel.inter.test.TestA;

public class ClassUtils {

public static List<Class> getAllClassbyInterface(Class c) {

List<Class> returnList = new ArrayList<Class>();

if (c.isInterface()) { // 如果是接口。。。。
String packageName = c.getPackage().getName();
System.out.println("当前接口在的包"+packageName);

try {
List<Class> allClass = getClasses(packageName);
                for(int i=0;i<allClass.size();i++){
                if(!c.equals(allClass.get(i))){
                returnList.add(allClass.get(i));
                }
                }

}
catch (IOException e) {

e.printStackTrace();
}
catch (ClassNotFoundException e) {

e.printStackTrace();
}
}

return returnList;
}

/**
* 从一个包中查到所有的类
*
* @param packageName
* @return
* @throws IOException
* @throws ClassNotFoundException
*/
private static List<Class> getClasses(String packageName) throws IOException, ClassNotFoundException {

List<Class> classes = new ArrayList<Class>();

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
System.out.println("************"+packageName.indexOf("."));
// String aa = "com/corejava/model.abstractmodel.inter";

String path = packageName.replace(".","/");
Enumeration<URL> resources = classLoader.getResources(path);

List<File> dirs = new ArrayList<File>();
while (resources.hasMoreElements()) {
URL resource = resources.nextElement();
dirs.add(new File(resource.getFile()));
}
for (File dir : dirs) {
classes.addAll(findClass(dir, packageName));
}
return classes;
}

/**
* @param directory
*            文件路径
* @param packageName
*            包名
* @return 查找这个包下面的所有的class文件
* @throws ClassNotFoundException
*/
private static List<Class> findClass(File directory, String packageName) throws ClassNotFoundException {
List<Class> classes = new ArrayList<Class>();
if (!directory.exists()) {
return classes;
}
File[] files = directory.listFiles();
for (File file : files) {
if (file.isDirectory()) {
assert !file.getName().contains(".");
classes.addAll(findClass(file, packageName + "." + file.getName()));
} else if (file.getName().endsWith(".class")) {
classes.add(Class.forName(packageName + "." + file.getName().substring(0, file.getName().length() - 6)));
}
}
return classes;
}






public static void main(String[] args) {
   

List <Class> list = getAllClassbyInterface(TestA.class);

System.out.println("------"+list.size());

for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}





    }



}
分享到:
评论

相关推荐

    遍历class

    2. **遍历指定包下的所有类**: 这通常涉及到文件系统的操作,因为Java类名与文件路径是对应的。你可以通过递归遍历指定包的目录结构,找到所有的`.class`文件,然后转换为类名。例如,`com.example.MyClass.class`...

    javaSE的import要点和packet下类的编译和运行.doc

    如果进入`day6`目录直接运行`java Test`,会出错,因为Java会在这个目录下查找对应的`Test.class`,而不是上一级目录。 总结,理解和熟练运用`import`语句以及在命令行环境中编译和运行带有包的Java类,是Java开发...

    在Java的反射中,Class.forName和Class

    首先,`Class.forName`是Java.lang.Class的一个静态方法,它根据给定的全限定类名(包括包名和类名)来加载并初始化类。这个方法的主要作用是将字符串形式的类名转换为实际的Class对象。例如,`Class.forName("java....

    filenet工具类及需要的jar包

    它们包含了如`Filenamespace`,`ObjectStore`,`Class`,`Object`等核心类,这些都是与Filenet交互的基础。 配置Filenet API通常涉及以下步骤: 1. **导入jar包**:将所需的Filenet API jar文件添加到项目的类路径...

    import及Java类的搜索路径.docx

    - 这种方式导入整个包下的所有类。这种方式通常用于简化代码,但可能会导致命名冲突。 #### 三、Java默认导入 Java编译器默认为所有的Java程序导入了JDK的`java.lang`包中的所有类。这意味着像`System`、`String`...

    扫描Class文件的方法

    1. **Google Reflections**:这是一个强大的反射和元数据发现库,它可以扫描类路径,查找所有类、方法、字段,甚至注解和它们的关系。 2. **ClassGraph**:这个库提供了快速、全面的类路径扫描功能,支持复杂的过滤...

    通过SPI实现动态加载外部jar的实现类

    1. **定义服务接口**:首先,你需要定义一个服务接口,这个接口会作为所有实现类的公共规范。 ```java public interface MyService { void doSomething(); } ``` 2. **创建服务提供者**:然后,开发实现服务...

    java期末复习第讲面向对象程序设计.pptx

    类路径(CLASSPATH)是Java查找.class文件的路径,编译时(javac -d)和运行时(java)都需要指定正确的路径。默认情况下,Java会搜索当前目录下的类,但可以通过设置环境变量CLASSPATH来指定其他位置。 方法的重载...

    javac的一些细节

    - 当编译一个包含包声明的类时,编译后的 `.class` 文件应存放在对应包的目录结构中。 **包的使用示例**: ```java package A; public class Hello { public static void main(String[] args) { System.out....

    Common Logging的jar包.zip

    每个具体的日志框架都有对应的适配器,例如`Log4jLoggerAdapter`对应Log4j,`java.util.logging.LoggerAdapter`对应Java Util Logging。 4. **配置**: Commons Logging的配置通常通过环境变量、系统属性或配置文件...

    探索Java集合的宝藏:集合框架的主要接口和类全解析

    ### Java集合框架的主要接口和类全解析 #### Java集合框架概览 Java集合框架是Java标准库的一个核心组成部分,它为开发人员提供了多种用于存储和操作数据的方式。这些集合类和接口的设计旨在满足不同的需求,并...

    最简化tomcat设计,socket,web服务器

    4,如果访问的是sevlet,则使用类加载器,根据configServlet.xml中配置的参数,查找对应的class,载入 5,最后执行方法. 6,可扩展开发,在com.cm.util包下,可编写专门读取txt,ini,propertie等文件的实现类, 当然...

    北大青鸟 Java 教材 第7章描述详细,有示例及图解.

    java.util 包提供了许多有用的类和接口,用于处理日期、时间、集合和数学运算等。其中,java.lang 包是 Java 的核心包,包含了 String、Math、Object 和 Class 等类,它们都是 Java 编程的基础。 二、Date 类 Date...

    VC++根据文件后缀名获文件打开方式

    在VC++项目中,你可以创建一个`Util`类,包含一个成员函数,如`GetFileOpenExecutor`,接收文件扩展名作为参数,然后执行以上步骤。`Util.cpp`和`Util.h`文件应分别包含实现和接口声明。 例如,在`Util.cpp`中,你...

    java30个应该掌握的基础

    实现接口意味着类需要提供接口中所有方法的具体实现。例如,`class MyClass implements MyInterface` 表示 `MyClass` 实现了 `MyInterface` 接口。 ### 25. 实现多个接口 Java 支持类实现多个接口。例如,`class ...

    java操作串口的jar包与dll/so文件,RXTX的64位linux/windows两个版本

    1. **安装RXTX**:解压对应的ZIP文件,将DLL(Windows)或SO(Linux)文件放置到系统路径下的正确位置。对于Windows,这通常是`System32`目录;对于Linux,可能需要将SO文件放到`/usr/lib`或`/usr/local/lib`。 2. ...

    网进科技JAVA编码规范

    - `com.netmarch.interface`:接口类。 - `com.netmarch.infaimpl` 或 `com.netmarch.dao`:接口实现类。 - `com.netmarch.abst`:抽象类。 - `com.netmarch.hibernate`:Hibernate 相关类。 - `...

    Java集合框架Map接口.pdf

    Java集合框架中的Map接口是Java编程中非常重要的一个部分,它提供了一种存储键值对数据的方式。在Map中,每个键(key)都是唯一的,用于标识对应的值(value),而值可以重复出现。这种数据结构广泛应用于各种场景,...

    Tomcat研究之ClassLoader.pdf

    4. **Catalina ClassLoader**:该类加载器专门用于加载Tomcat实现所有接口的类库。这些类库对Web应用程序是不可见的,通常位于`$CATALINA_HOME/server/classes`和`$CATALINA_HOME/server/lib`。默认加载的类库包括:...

    java spi 可运行 demo

    1. **查找配置文件**:`ServiceLoader`会去`META-INF/services`目录下查找对应接口的配置文件。 2. **读取配置**:读取配置文件中的每一行,每行代表一个服务提供者的全限定类名。 3. **加载服务**:对配置文件中的...

Global site tag (gtag.js) - Google Analytics