package com;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class FileClassLoader extends ClassLoader {
public Class findClass(String name) {
byte[] data = loadClassData(name);
return defineClass(name, data, 0, data.length);
}
private byte[] loadClassData(String name) {
FileInputStream fis = null;
byte[] data = null;
try {
fis = new FileInputStream(new File("E:\\Documents and Settings\\Administrator\\workspace\\ClassLoaderTest\\bin\\" + name + ".class"));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int ch = 0;
while ((ch = fis.read()) != -1) {
baos.write(ch);
}
data = baos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
}
package com;
import java.lang.reflect.Method;
public class MyApp {
public static void main(String[] args) throws Exception {
FileClassLoader loader = new FileClassLoader();
Class objClass = loader.findClass("MyApp");
Object obj = objClass.newInstance();
Method[] allMethods=objClass.getMethods();
for (int i = 0; i < allMethods.length; i++) {
System.out.println(allMethods[i].getName());
}
}
}
这样就可以,我在自己这里测试通过。就是打包了也是没有问题的,想加载哪里的自己改下路径就行