All pastes #417789 Raw Edit

Mine

public java v1 · immutable
#417789 ·published 2007-03-31 04:10 UTC
rendered paste body
package MyPackage;import java.io.*;public class RecursiveClassLoader extends ClassLoader {    String defdir;    public RecursiveClassLoader(String defdir) {        this.defdir = defdir;        if (this.defdir == null)            this.defdir = System.getProperty("user.dir", "");    }    /**     * loadClass Recursively searches for a class by the name of <i>name</i>,     * starting from <i>dir</i>.     *     * @param dir Starting search directory     * @param name Class name (without .class)     * @return The resulting <tt>Class</tt> object     * @throws ClassNotFoundException If the class is not found     */    public Class<?> loadClass(String dir, String name) throws ClassNotFoundException {        int idx = name.lastIndexOf('.');        String qualified = name;        if (idx > 0) {            name = name.substring(idx + 1);        }        try {            File file = search(dir, name + ".class");            if (file != null) {                FileInputStream in = new FileInputStream(file);                byte[] buffer = new byte[in.available()];                in.read(buffer);                Class c = defineClass(qualified, buffer, 0, buffer.length);                return c;            }        } catch (Throwable t) {        }        return super.loadClass(qualified);    }    /**     * loadClass Recursively searches for a class by the name of <i>name</i>,     * starting from the default directory.     * @param name Class name (without .class)     * @return The resulting <tt>Class</tt> object     * @throws ClassNotFoundException If the class is not found     */    public Class<?> loadClass(String name) throws ClassNotFoundException {        return loadClass(defdir, name);    }    private File search(String dir, String name) {        File[] list = new File(dir).listFiles();        for (File f : list) {            if (f.isDirectory()) {                File ret = search(f.getPath(), name);                if (ret != null)                    return ret;            }            if (f.getName().equalsIgnoreCase(name)) {                return f;            }        }        return null;    }}