1.参考老外的
- public class ClassPathUpdater {
- /** Used to find the method signature. */
- private static final Class[] PARAMETERS = new Class[] { URL.class };
- /** Class containing the private addURL method. */
- private static final Class CLASS_LOADER = URLClassLoader.class;
- /**
- * Adds a new path to the classloader. If the given string points to a file,
- * then that file's parent file (i.e., directory) is used as the directory
- * to add to the classpath. If the given string represents a directory, then
- * the directory is directly added to the classpath.
- *
- * @param s
- * The directory to add to the classpath (or a file, which will
- * relegate to its directory).
- */
- public static void add(String s) throws IOException, NoSuchMethodException,
- IllegalAcces***ception, InvocationTargetException {
- add(new File(s));
- }
- /**
- * Adds a new path to the classloader. If the given file object is a file,
- * then its parent file (i.e., directory) is used as the directory to add to
- * the classpath. If the given string represents a directory, then the
- * directory it represents is added.
- *
- * @param f
- * The directory (or enclosing directory if a file) to add to the
- * classpath.
- */
- public static void add(File f) throws IOException, NoSuchMethodException,
- IllegalAcces***ception, InvocationTargetException {
- f = f.isDirectory() ? f : f.getParentFile();
- add(f.toURI().toURL());
- }
- /**
- * Adds a new path to the classloader. The class must point to a directory,
- * not a file.
- *
- * @param url
- * The path to include when searching the classpath.
- */
- public static void add(URL url) throws IOException, NoSuchMethodException,
- IllegalAcces***ception, InvocationTargetException {
- Method method = CLASS_LOADER.getDeclaredMethod("addURL", PARAMETERS);
- method.setAccessible(true);
- method.invoke(getClassLoader(), new Object[] { url });
- }
- private static URLClassLoader getClassLoader() {
- return (URLClassLoader) ClassLoader.getSystemClassLoader();
- }
- }
ClassPathUpdater.add("E:\\workspaces\\MyDemos\\MyClass.class");
String path = "E:\\workspaces\\MyDemos\\";
URL url = new URL("file", null, path);
URLClassLoader loader = new URLClassLoader(new URL[] {url});
Class clazz = loader.loadClass("MyClass");
2、rewrite ClassLoader
- static class MyClassLoader extends ClassLoader {
- @Override
- public Class<?> findClass(String name) {
- try {
- FileInputStream in = new FileInputStream(name);
- ArrayList<Byte> l = new ArrayList<Byte>();
- int c;
- while ((c = in.read()) != -1) {
- l.add(new Byte((byte)c));
- }
- byte[] b = new byte[l.size()];
- for (int i = 0; i < l.size(); i++) {
- b[i] = l.get(i).byteValue();
- }
-
- return defineClass(b, 0, b.length);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return null;
- }
- }
MyClassLoader mcl = new MyClassLoader();
clazz = mcl.loadClass("E:\\workspaces\\MyDemos\\MyClass.class");
阅读(2862) | 评论(0) | 转发(0) |