包括二级包,classes和jar的情况都考虑
/**
* 获得包下的类
*
* @param packageName
* The base package
* @return The classes
* @throws ClassNotFoundException
* @throws IOException
*/
public static Class[] getClasses(String packageName)
throws ClassNotFoundException, IOException {
ClassLoader classLoader = Thread.currentThread()
.getContextClassLoader();
assert classLoader != null;
String path = packageName.replace('.', '/');
Enumeration<URL> resources = classLoader.getResources(path);
List<File> dirs = new ArrayList<File>();
ArrayList<Class> classes = new ArrayList<Class>();
while (resources.hasMoreElements()) {
URL resource = resources.nextElement();
String p = "";
if (resource.getFile().indexOf("!") >= 0) {// 在其他的jar文件中
p = resource.getFile().substring(0,
resource.getFile().indexOf("!")).replaceAll("%20", "");
} else {// 在classes目录中
p = resource.getFile();
}
if (p.startsWith("file:/"))
p = p.substring(6);
if (p.toLowerCase().endsWith(".jar")) {
JarFile jarFile = new JarFile(p);
Enumeration<JarEntry> enums = jarFile.entries();
while (enums.hasMoreElements()) {
JarEntry entry = (JarEntry) enums.nextElement();
String n = entry.getName();
if (n.endsWith(".class")) {
n = n.replaceAll("/", ".").substring(0, n.length() - 6);
if (n.startsWith(packageName)) {
classes.add(Class.forName(n));
}
}
}
} else {
dirs.add(new File(p));
}
}
for (File directory : dirs) {
classes.addAll(findClasses(directory, packageName));
}
return classes.toArray(new Class[classes.size()]);
}
/**
* 查找一个文件夹下的文件
*
* @param directory
* The base directory
* @param packageName
* The package name for classes found inside the base directory
* @return The classes
* @throws ClassNotFoundException
*/
public static List<Class> findClasses(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(findClasses(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;
}
分享到:
相关推荐
资源分数必须最少填1,不好意思。如果没有积分可以去git链接下载,本人博客有git地址。博客地址:... java 遍历指定包下所有类,返回完整类名。工具类,可以直接拷入使用。
一个查找类的小工具 主要有两个用途: 1.检索类所在的文件(一般为.jar)。然后就可以把它加到classpath中。 2....在仅知道类名的情况下,检索出类的包路径,然后就可以正确书写import指令。
通过以上讨论,我们了解到如何使用C#的递归方法查找文件夹下的所有子目录,并了解了相关的关键知识点,包括递归概念、文件操作、WinForm应用的构建以及项目配置。在实际开发中,可以根据具体需求进行调整和优化。
2. 搜索范围设定:用户可以选择搜索的目录,这通常包含项目的类路径(classpath)下的所有jar文件和目录。 3. 扫描jar文件和目录:工具遍历指定的目录,读取每个jar文件的META-INF/MANIFEST.MF文件来获取jar的主类和...
1.搜索分析指定路径下所有jar包中是否存在指定文件。譬方说要在jar包中查询某个**.class文件。用户可以不用打开Jar包,直接输入路径和要查找的文件即可搜索。 2.列出指定路径下的所有Jar包文件 3.除了对Jar包进行...
如果JAR作为扩展安装在`ext`子目录中,其`JAR-CLASS-PATH`将被忽略,因为假设所有扩展所需类都已经包含在内或作为扩展安装。 **旧版Java启动器**: 在Java 1.2之前的版本,启动器不支持Java扩展框架,类的查找过程...
2.搜索分析指定路径下所有jar包中是否存在指定文件。譬方说要在jar包中查询目个**.class文件。用户可以不用打开Jar包,直接输入路径和要查找的文件即可搜索。 3.除了对Jar包进行搜索分析外,还可以对zip包进行分析 4...
在实际使用中,"JAR包查找工具"可以帮助开发者快速定位项目中使用的类,特别是在面临大量依赖库的情况下,能有效提高开发效率。例如,当遇到某个类的错误或需要了解其来源时,通过此工具可以迅速找到对应的JAR包,...
Spring docs可以方便查找spring包下面的所包含的类,可以更适合应用哦
Java源代码,用于在jar包中查找包和类。
此时,这款工具就显得尤为重要,它能够快速遍历指定目录下的所有jar和zip文件,查找匹配的class文件,且无需提供完整的包名,只需类名即可。 多线程是此工具实现高速查找的关键技术。通过创建多个线程并行处理文件...
该工具的主要功能是分析指定目录下的所有jar包,找出其中可能重复的类。通过比较类之间的相似度,当相似度达到80%或以上时,工具将自动标记这些类可能存在重复。这种高相似度的设定确保了提示的准确性,减少了误报的...
从选定的目录里面,查找出所有包含所指定的Java Class类的Jar包。 -------------------------------------------------------------------------- 使用方法: 1、请首先输入需要查找的Java Class类,需要输入完整的...
这种性质使得查找、插入和删除操作在平均情况下具有O(log n)的时间复杂度。 在这个实现中,我们有两个关键文件:`TreeD.cpp`和`TreeH.h`。`TreeH.h`很可能是头文件,包含了二叉查找树模板类的定义,而`TreeD.cpp`则...
`表明我们打算使用`ArrayList`类,它位于`java.util`包下。如果没有`import`语句,我们需要在每个引用类的地方完全限定类名,如`java.util.ArrayList`. 要实现“找jar包工具”,这个工具可能包含以下步骤: 1. **...
要查找包含特定内容的文件,我们需要遍历指定文件夹下的所有文件,然后逐个读取它们的内容进行比对。 以下是一个简单的步骤概述: 1. 使用`Directory.GetFiles()`方法获取指定文件夹下的所有文件路径。 2. 对每个...
JAVA类查找工具是一款专为Java开发者设计的实用软件,它能帮助用户快速定位并查找Java类,无论是存在于JAR文件还是ZIP文件中。这个工具极大地方便了开发过程中的代码管理和调试,尤其当项目庞大,类库众多时,它的...
在IT行业中,数据库是存储和管理数据的核心工具,而基于数据库的查找类是与数据库交互的重要环节。这里的"基于数据库的查找类"主要是指设计一个Java类,它封装了对数据库进行查询操作的功能。这个类可能命名为`DbOp`...
总结,这个任务的核心在于使用C#的文件系统操作类和递归算法,结合VS2008进行开发,实现根据文件名查找目录及其子目录下的所有匹配文件。这个过程中涉及到了文件系统API、编程逻辑设计和异常处理等多个方面,是C#...
标题中的“查找类型类浏览器应用程序示例”暗示我们讨论的主题是关于一种特定类型的软件应用,即浏览器应用程序,它可能涉及到程序设计中的类型类查找机制。这类应用可能用于搜索和显示不同种类的数据,如网页、文件...