package com.ClassSock;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class FileClassLoader extends ClassLoader
{
public static final String drive = "F:\\photomanage\\hard\\bin\\zhenghe\\";
public static final String fileType = ".class";
public FileClassLoader() {
super();
}
public FileClassLoader(ClassLoader arg0) {
super(arg0);
}
public Class findClass(String name)
{
byte[] data = loadClassData(name);
return defineClass(name, data, 0, data.length);
}
public byte[] loadClassData(String name)
{
FileInputStream fis = null;
byte[] data = null;
try
{
fis = new FileInputStream(new File(drive + name + fileType));
System.out.println(drive + name + fileType);
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;
}
public static void main(String[] args) throws Exception
{
FileClassLoader loader = new FileClassLoader();
Class objClass = (Class) loader.loadClass("Bhui", true).newInstance(); Object obj = objClass.newInstance();
// System.out.println(objClass.getName());
// System.out.println(objClass.getClassLoader());
}
}在线等待高手回复
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class FileClassLoader extends ClassLoader
{
public static final String drive = "F:\\photomanage\\hard\\bin\\zhenghe\\";
public static final String fileType = ".class";
public FileClassLoader() {
super();
}
public FileClassLoader(ClassLoader arg0) {
super(arg0);
}
public Class findClass(String name)
{
byte[] data = loadClassData(name);
return defineClass(name, data, 0, data.length);
}
public byte[] loadClassData(String name)
{
FileInputStream fis = null;
byte[] data = null;
try
{
fis = new FileInputStream(new File(drive + name + fileType));
System.out.println(drive + name + fileType);
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;
}
public static void main(String[] args) throws Exception
{
FileClassLoader loader = new FileClassLoader();
Class objClass = (Class) loader.loadClass("Bhui", true).newInstance(); Object obj = objClass.newInstance();
// System.out.println(objClass.getName());
// System.out.println(objClass.getClassLoader());
}
}在线等待高手回复
->
Class objClass = (Class) loader.loadClass("Bhui", true);
or
Class objClass = (Class) loader.findClass("Bhui");
调用class.newInstance()方法就是创建一个实例了
ssssssssssssss
Exception in thread "main" java.lang.NoClassDefFoundError: Bhui (wrong name: zhenghe/Bhui)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at com.ClassSock.FileClassLoader.findClass(FileClassLoader.java:25)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.ClassSock.FileClassLoader.main(FileClassLoader.java:57)
求解
public byte[] loadClassData(String name)
{
FileInputStream fis = null;
byte[] data = null;
try
{
if (name.indexOf(".") > 0) { //把包信息也解析
name = name.relaceAll("\\.", "\\\\");
}
fis = new FileInputStream(new File(drive + name + fileType));
System.out.println(drive + name + fileType);
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;
}调用
Class objClass = loader.findClass("com.ClassSock.Bhui"); //javadoc里推荐使用findClass
Object obj = objClass.newInstance();
javac -d . FileClassLoader.java
其中 . 代表当前路径,具体路径可以自己根据需要修改
执行
java FileClassLoader
Object obj = objClass.newInstance();
我在上面已经声明了路径了 public static final String drive = "F:\\photomanage\\hard\\bin\\zhenghe\\";
所以在加路径就出现错误了。
求解
包相当于文件夹
所以你的路径不包括包路径是不对的
你要用 javac -d 的方式来编译,把包路径也生成
然后加载的时候把包路径的信息也带上