`
TRAMP_ZZY
  • 浏览: 139883 次
社区版块
存档分类
最新评论

获取ClassLoader加载目标类的路径

    博客分类:
  • Java
阅读更多

ClassLoader加载的目标类的路径。

public class SrcAdd {
    public static URL getClassLocation(final Class cls) throws MalformedURLException {
        if (cls == null) {
            throw new IllegalArgumentException("null point, cls");
        }
        URL result =null;
        final String clsAsResource = cls.getName().replace('.', '/').concat(".class");
        final ProtectionDomain pd = cls.getProtectionDomain();

        if (pd != null) {
            final CodeSource cs = pd.getCodeSource();
            // 'cs' can be null depending on the classloader behavior:
            if (cs != null) result = cs.getLocation();
            if (result != null) {
                // Convert a code source location into a full class file location
                // for some common cases:
                if ("file".equals(result.getProtocol())) {
                    if (result.toExternalForm().endsWith(".jar") ||
                            result.toExternalForm().endsWith(".zip"))
                        result = new URL("jar:".concat(result.toExternalForm())
                                .concat("!/").concat(clsAsResource));
                    else if (new File(result.getFile()).isDirectory())
                        result = new URL(result, clsAsResource);

                }
            }
        }
        if (result == null) {
            // Try to find 'cls' definition as a resource; this is not
            // document.d to be legal, but Sun's implementations seem to         //allow this:
            final ClassLoader clsLoader = cls.getClassLoader();
            result = clsLoader != null ?
                    clsLoader.getResource(clsAsResource) :
                    ClassLoader.getSystemResource(clsAsResource);
        }
        return result;
    }

    public static void main(String[] args) throws ClassNotFoundException, MalformedURLException {
        System.out.println(getClassLocation(Class.forName("java.net.URL")));
    }
}
分享到:
评论

相关推荐

    Java中获取文件路径的几种方式

    这两种方法用于获取类路径下的资源文件路径,特别适用于JAR包或类加载器管理的资源。 ##### 示例代码: ```java URL xmlPath = this.getClass().getClassLoader().getResource("selected.txt"); System.out.println...

    Java 自动加载JAR文件并运行其中的类方法

    在Java编程中,有时我们需要动态地加载外部JAR文件,并执行其中特定的类方法,这在插件系统、模块化应用或动态扩展性需求中尤为常见。本篇将详细讲解如何实现这一目标。 首先,理解JAR(Java Archive)文件是Java...

    从内存卡中选择 apk 动态加载apk

    4. **加载和实例化目标类**:使用新创建的ClassLoader加载目标类,并实例化该类。通常,我们会有一个主接口定义需要动态加载的功能,目标类会实现这个接口。 5. **执行目标类的方法**:通过反射调用加载的类中的...

    Android动态加载(下)——加载已安装APK中的类和资源

    首先,我们需要获取到目标APK的路径,这可以通过Context.getPackageCodePath()或者File类来完成。 接着,我们需要创建一个 DexClassLoader实例,传入APK的路径作为 Dex文件的位置,以及原始的类加载器作为父加载器...

    android 动态加载class

    4. 加载指定Activity:通过反射调用ClassLoader的loadClass()方法,加载目标Activity的类。 5. 初始化并启动Activity:使用Context的startActivity()方法,传入反射获取到的Activity Class对象及其Intent。 在整个...

    JAVA获取同一路径下所有子类或接口实现类

    通过这段代码,我们可以获取到指定路径下所有实现了给定接口的类或继承了给定类的子类,这对于动态加载和管理类库非常有用。注意,这种方法只适用于文件系统类加载,对于复杂的类加载场景(如网络加载、自定义类加载...

    ClassLoader in OSGI

    - 用途:通常由`AppClassLoader`担任,根据Java应用的类路径(`CLASSPATH`)来加载Java类。 - 获取方法:可以通过`ClassLoader.getSystemClassLoader()`来获取。 - 负责加载:主要负责通过`java-classpath`或`-D...

    JAVA 基础培训,JDK和JVM,核心类的介绍和使用

    实现这一目标的关键在于修改类搜索路径和清空类加载器的缓存。 - 继承`java.lang.ClassLoader`并重写`loadClass`方法,允许动态定位和加载类文件。 - 创建新的ClassLoader实例,使用不同的类搜索路径,这不仅更新...

    类的加载机制笔记

    3. **应用程序类加载器(Application ClassLoader)**:也称为系统类加载器,它是ClassLoader类的默认实例,主要负责加载当前应用程序的类路径(ClassPath)所指定的jar或类文件。开发者可以创建自己的类加载器继承...

    java或wed解决路径问题

    一种方法是利用Java的类加载机制,通过`Class`对象的`getClassLoader().getResource("")`方法获取`ClassPath`,然后进一步处理以得到WebRoot。但这种方法只适用于类位于`WebRoot/WEB-INF/classes`下,如果类被打包到...

    UrlUtil.zip_UrlUtil_java URLUtil

    3. **取得当前类所在的ClassPath目录**:开发者可以通过`System.getProperty("java.class.path")`获取到系统的类路径,但要获取到具体的类所在的目录,可能需要进一步处理,如拆分路径,找到包含目标类的JAR或目录。...

    扫描接口实现类

    3. **接口扫描**:为了找到实现特定接口的所有类,我们需要遍历类路径,加载每个类,并使用`Class.isAssignableFrom(Class<?> clazz)`检查该类是否实现了目标接口。`getInterfaces()`方法可以获取类实现的所有接口。...

    java程序开发中路径的问题

    通过`ClassLoader.getResource()`或`Class.getResource()`方法,我们可以获取到类路径中的资源。这些方法返回的是URL对象,可以进一步解析以获取路径信息。 **文件输入/输出流** 使用`FileInputStream`和`...

    安卓插件机制相关-android动态加载插件dex后的jar以方便功能扩展.rar

    2. **获取 ClassLoader**:创建一个 DexClassLoader 实例,传入基础类加载器(通常是 PathClassLoader)、包含 .dex 文件的路径、库搜索路径和基类加载器的父路径。 3. **动态加载**:使用 ClassLoader 加载指定的...

    Java Resource

    3. **使用ClassLoader加载资源**:`ClassLoader`可以用于动态加载类和资源,例如通过`getClass().getResourceAsStream("/filename")`来获取当前类所在包的资源。 4. **尝试使用Resources类**:自Java 6开始,`java....

    Android动态加载未安装apk

    3. 创建ClassLoader:通过`DexClassLoader`实例化一个类加载器,它能加载APK中的`.dex`文件。通常的构造参数包括APK的路径、优化过的Dex文件路径(用于Dalvik VM)、库文件路径和父类加载器。 ```java File ...

    android 动态加载jar代码

    3. 实例化类并调用方法:使用DexClassLoader找到并加载目标类,然后实例化并调用相关方法。 三、实现步骤 1. 创建 DexPathList:首先,构建一个 DexPathList 对象,包含.dex文件所在的路径列表。 2. 创建 ...

    利用反射,根据类得完全限定名获得该类得实例

    1. **加载类**:首先,我们需要使用`Class.forName()`或`ClassLoader.loadClass()`方法来加载指定的类。 2. **创建实例**: - 如果类有一个无参数构造函数,可以直接使用`newInstance()`方法创建实例。 - 如果类有...

    webMethods Integration Server8.2

    webMethods Integration Server 8.2中的类加载器包括OSGi Bundle ClassLoader和Integration Server ClassLoaders。这两种类加载器处理类加载任务,确保了类的安全加载和动态替换。Classpaths是类加载器查找类文件的...

    JVM调优篇.pdf

    1. 启动类加载器(Bootstrap ClassLoader):负责加载JAVA_HOME\lib目录中的,或通过-Xbootclasspath参数指定路径中的,且被虚拟机认可(按文件名识别,如rt.jar)的类。 2. 扩展类加载器(Extension ClassLoader)...

Global site tag (gtag.js) - Google Analytics