import java.io.*; import java.net.*; import java.util.*; import java.lang.reflect.Method; public class CustomClassLoader extends URLClassLoader { PRivate FileInputStream input = null; //文件输入流 private ByteArrayOutputStream out = null; //字节数组输出流 private String[] url = null; //类文件加载路径 private byte[] data = null; //类文件字节码 private String extensionalName = ""; //类文件扩展名 public CustomClassLoader(URL[] urls) throws Exception{ super(urls); this.url = new String[urls.length]; for (int i = 0; i < urls.length; i++) { this.url[i] = urls[i].toURI().toString(); } } /* * 解析URL */ private void setFilePath() { for (int i = 0; i < this.url.length; i++) { if (this.url[i].substring(0,4).toLowerCase().equals("file") == true) { this.url[i] = this.url[i].substring(5); } } } /* * 获得指定类名(包名+类名)文件的字节码 * @name name String * @return byte[] */ private byte[] getFileData(String name) { try { this.setFilePath(); for (String url : this.url) { String fileName = url + name.replace('.', '/').concat(".") + this.getExtensionalName(); input = new FileInputStream(new File(fileName)); if (input != null) { break; } } out = new ByteArrayOutputStream(); data = new byte[1024]; int len = -1; while ((len = input.read(data)) != -1) { out.write(data, 0, len); } data = out.toByteArray(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (input != null) input.close(); if (out != null) out.close(); return data; } catch (Exception e) { e.printStackTrace(); return null; } } } /* * 根据指定类名查找类文件 * @param name String * @return Class */ protected Class findClassByName(String name) { try { byte[] data = this.getFileData(name); if (data == null) { return null; } return this.defineClass(name, data, 0, data.length); } catch (Exception e) { e.printStackTrace(); return null; } } /* * 重写loadClass()方法 * @param name String * @return Class */ public Class loadClass(String name) { Class c = null; try { c = super.loadClass(name); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { if (c == null) //父类默认方法没有加载到指定类时,使用自定义方法查找 c = this.findClassByName(name); return c; } } public String getExtensionalName() { return extensionalName; } public void setExtensionalName(String extensionalName) { this.extensionalName = extensionalName; } public static void main(String[] args) throws Exception { URL[] url = new URL[] {new URL("file:e:/")}; //添加你想要加载类的路径 //网络或本地均可 CustomClassLoader csl = new CustomClassLoader(url); csl.setExtensionalName("rs"); Class c1 = csl.loadClass("com.demo"); Object obj = c1.newInstance(); Method method = c1.getMethod("printText", null); method.invoke(obj, null); } } 资料引用:http://www.knowsky.com/540395.html