首页 > 代码库 > 自定义类加载器——加载任意指定目录的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