展开全部
你所说的java文件是什么文件?如果是java源码文32313133353236313431303231363533e58685e5aeb931333365643566件是不能调用的,但如果是编译后的class文件可以通过类加载器进行加载,然后通过反射调用;但一般会通过实现特定的接口来简化调用过程。一个自定义的类加载器如下 :class MyClassLoader extends ClassLoader {
//类加载器的名称
private String name;
//类存放的路径
private String path = "E:\\bin";
MyClassLoader(String name) {
this.name = name;
}
MyClassLoader(ClassLoader parent, String name) {
super(parent);
this.name = name;
}
/**
* 重写findClass方法,加载特定目录下的类文件
*/
@Override
public Class> findClass(String name) {
byte[] data = loadClassData(name);
return this.defineClass(name, data, 0, data.length);
}
public byte[] loadClassData(String name) {
try {
name = name.replace(".", "//");
FileInputStream is = new FileInputStream(new File(path, name + ".class"));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int b = 0;
while ((b = is.read()) != -1) {
baos.write(b);
}
return baos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}