各位大神 求解一个问题 我自己写了个类加载器想来加载类我的类加载器是
package com.djk.classloader;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;import javax.imageio.stream.FileImageInputStream;/**
* 自定义类加载器
* @author djk
*
*/
public class FileSystemClassLoader extends ClassLoader
{
/**
* 类加载器加载class文件的目录
*/
private String rootPath;
public FileSystemClassLoader(String rootPath)
{
this.rootPath = rootPath;
}
/**
* 自己定义一个类加载器主要是重写findclass方法
*/
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException
{
byte [] classByte = getBytes(name);
if(null == classByte)
{
throw new ClassNotFoundException();
}else
{
return defineClass(name, classByte, 0,classByte.length);
}
}
private byte [] getBytes (String className)
{
String path = classNameToPath(className);
try
{
InputStream is = new FileInputStream(new File(path));
ByteArrayOutputStream bas = new ByteArrayOutputStream();
int length = 0;
byte [] buffer = new byte[4028];
while((length =is.read(buffer))!=-1)
{
bas.write(buffer, 0, length);
}
return bas.toByteArray();
} catch (Exception e)
{
}
return null;
}
/**
* 把文件的名称写完
* @param className
* @return
*/
private String classNameToPath(String className)
{
return this.rootPath+"/"+className.replace(".", "/")+".class";
}
}然后我在F盘目录下放了Test1.class文件 然后利用这个自定义类加载器来加载这个Test1.class文件 FileSystemClassLoader fileSystemClassLoader = new FileSystemClassLoader("F:");
fileSystemClassLoader.loadClass("Test1").newInstance();
发现报错 Exception in thread "main" java.lang.NoClassDefFoundError: Test1 (wrong name: com/djk/类加载器/Test1) 想请教下为什么会报这个错
我自己也考虑过 是不是由于是用了appclassLoder去加载了啊?用appclassloader去加载的话确实加载不到 不过我是用自己定义的类加载器去加载这个class文件为什么会报这个错啊?求大神、
package com.djk.classloader;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;import javax.imageio.stream.FileImageInputStream;/**
* 自定义类加载器
* @author djk
*
*/
public class FileSystemClassLoader extends ClassLoader
{
/**
* 类加载器加载class文件的目录
*/
private String rootPath;
public FileSystemClassLoader(String rootPath)
{
this.rootPath = rootPath;
}
/**
* 自己定义一个类加载器主要是重写findclass方法
*/
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException
{
byte [] classByte = getBytes(name);
if(null == classByte)
{
throw new ClassNotFoundException();
}else
{
return defineClass(name, classByte, 0,classByte.length);
}
}
private byte [] getBytes (String className)
{
String path = classNameToPath(className);
try
{
InputStream is = new FileInputStream(new File(path));
ByteArrayOutputStream bas = new ByteArrayOutputStream();
int length = 0;
byte [] buffer = new byte[4028];
while((length =is.read(buffer))!=-1)
{
bas.write(buffer, 0, length);
}
return bas.toByteArray();
} catch (Exception e)
{
}
return null;
}
/**
* 把文件的名称写完
* @param className
* @return
*/
private String classNameToPath(String className)
{
return this.rootPath+"/"+className.replace(".", "/")+".class";
}
}然后我在F盘目录下放了Test1.class文件 然后利用这个自定义类加载器来加载这个Test1.class文件 FileSystemClassLoader fileSystemClassLoader = new FileSystemClassLoader("F:");
fileSystemClassLoader.loadClass("Test1").newInstance();
发现报错 Exception in thread "main" java.lang.NoClassDefFoundError: Test1 (wrong name: com/djk/类加载器/Test1) 想请教下为什么会报这个错
我自己也考虑过 是不是由于是用了appclassLoder去加载了啊?用appclassloader去加载的话确实加载不到 不过我是用自己定义的类加载器去加载这个class文件为什么会报这个错啊?求大神、
"F:/Test1.class" ?
"F:/com/djk/类加载器/Test1.class" ?