首页 > 代码库 > 自定义类加载器——加载任意指定目录的class文件
自定义类加载器——加载任意指定目录的class文件
public class MyClassLoader extends ClassLoader{ String path;//自定义类加载器所负责的文件夹 public MyClassLoader(String path) { super(); this.path = path; } @SuppressWarnings("deprecation") @Override protected Class<?> findClass(String name) throws ClassNotFoundException { //通过 文件输入流 读取 指定的class文件 String file = path+"/"+name+".class"; System.out.println(file); try { FileInputStream fis = new FileInputStream(file); //将读取的class文件对应的 字节数据 写入到内存中 ByteArrayOutputStream out = new ByteArrayOutputStream(); int i = 0; while ((i = fis.read())!=-1) { out.write(i); } fis.close(); byte[] buf = out.toByteArray();//提取 写到内存中的字节数据到数组 // public byte[] toByteArray()创建一个新分配的 byte 数组。其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中。 return defineClass(buf, 0, buf.length); } catch (Exception e) { e.printStackTrace(); } return super.findClass(name); } }
测试类
public class MyCLassLoaderTest { static Scanner in = new Scanner(System.in); public static void main(String[] args) throws Exception { System.out.println("需要加载的class文件所在文件夹的路径:"); String path = in.nextLine();// 需要加载的class文件的父路径 System.out.println("需要加载的class文件的文件名:"); String name = in.nextLine(); Class clazz = new MyClassLoader(path).loadClass(name); //执行加载的class文件的main方法 // Method met = clazz.getMethod("main", String[].class); // System.out.println(met.toString()); // met.invoke(null, (Object)new String[]{}); // 通过自定义类加载器 加载任意目录下的指定class文件 Class clazz2 = new MyClassLoader(path).loadClass(name); System.out.println("\r\n--------------列出该class恩件中的所有构造方法=========="); Constructor[] cons = clazz2.getConstructors(); for (Constructor constructor : cons) { System.out.println(constructor.toString()); } System.out.println("---------------列出该class恩件中的所有putong方法。。....。。"); Method[] methods = clazz2.getMethods(); for (Method method : methods) { System.out.println(method.toString()); } } } //F:\java30\d24 //MyIEbyGUI
本文出自 “要么拼命,要么滚回去!” 博客,请务必保留此出处http://jiangzuun2014.blog.51cto.com/8732469/1533979
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。