java - 有没有办法在不知道包名的情况下加载特定路径中的所有类?

标签 java class reflection package classloader

我正在编写一个java应用程序,对文本文件执行一些操作。我将在我的应用程序中添加一项功能,可以使用用户的操作并对文件进行操作。我强制他们实现我的接口(interface),以将他们的方法名称掌握在我手中。并强制他们将类文件放在特定的路径中以将它们加载到我的应用程序中,但我不知道如何获取用户类的包名称以使用方法 class.forName(packageName.ClassName) 加载它们

有没有办法在不知道包名的情况下加载特定路径中的所有类?

最佳答案

类的名称是从 JarEntry 中提取的。

JarFile jarFile = new JarFile(JarPath);
Enumeration e = jarFile.entries();

URL[] urls = { new URL("jar:file:" + pathToJar+"!/") };
URLClassLoader cl = URLClassLoader.newInstance(urls);

while (e.hasMoreElements()) {
    JarEntry je = (JarEntry) e.nextElement();
    if(je.isDirectory() || !je.getName().endsWith(".class")){
        continue;
    }
// -6 because of .class
String className = je.getName().substring(0,je.getName().length()-6);
className = className.replace('/', '.');
Class c = cl.loadClass(className);
}

关于java - 有没有办法在不知道包名的情况下加载特定路径中的所有类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31554401/

相关文章:

java.lang.NoSuchMethodError : org. springframework.core.convert.support.ConversionServiceFactory.createDefaultConversionService() 错误

java - 在这种情况下(模数和加法之后)是否需要检查零?

java - 使用 @autowired 到 DI 后得到一个 null 对象

c# - List.Contains 对象比较失败

c# - GetRuntimeProperties 而不是 GetProperty

java - 有没有办法将字符串和数组放在单个 HashMap 中?

javascript - 如何创建具有未分配属性的 Javascript 构造函数/原型(prototype)?

c++ - 类模板实例化为类型模板参数,语法?

去反射 : get correct struct type of interface

java - Spring中如何进行注解?