Topic: 如何根据一个class的文件名,动态的加载class

  Print this page

1.如何根据一个class的文件名,动态的加载class Copy to clipboard
Posted by: KevinTian
Posted on: 2004-12-24 09:53

Question如何根据一个class的文件名,动态的加载classQuestion

我用java写的程序,在运行时刻会搜索
该程序所在文件夹下的extend文件夹
中的class文件.
假设extend文件中的所有class都是public的
而且都是Base的之类,但是不知道这些class所在的package

Question问题是,我的程序如何载入这些class,生成实例,并调用实例的方法

各位大虾多多指教SmileSmileSmileSmile

2.Re:如何根据一个class的文件名,动态的加载class [Re: KevinTian] Copy to clipboard
Posted by: KevinTian
Posted on: 2004-12-24 09:54

Class.forName似乎可以,但是Class.forName的参数是一个class的
全限定名,比如,com.kevintian.Sub
但是在我的程序中,程序知道的是完整的路径,
比如C:\myclass\com\kvintian\extend\sub1.class

3.Re:如何根据一个class的文件名,动态的加载class [Re: KevinTian] Copy to clipboard
Posted by: Jove
Posted on: 2004-12-24 10:22

根据目录猜出他的包名,因为c:\myclasss相当于classpath,每个目录都应该是package segment

4.Re:如何根据一个class的文件名,动态的加载class [Re: KevinTian] Copy to clipboard
Posted by: KevinTian
Posted on: 2004-12-24 11:28

是不是一个叫com.kevintian.MyClass的class必需放在类似...\com\kevintian的文件夹下才可以运行??

5.Re:如何根据一个class的文件名,动态的加载class [Re: KevinTian] Copy to clipboard
Posted by: beike
Posted on: 2004-12-28 19:28

KevinTian wrote:
是不是一个叫com.kevintian.MyClass的class必需放在类似...\com\kevintian的文件夹下才可以运行??

我想应该是

6.Re:如何根据一个class的文件名,动态的加载class [Re: KevinTian] Copy to clipboard
Posted by: sailor
Posted on: 2005-01-04 16:47

KevinTian wrote:
是不是一个叫com.kevintian.MyClass的class必需放在类似...\com\kevintian的文件夹下才可以运行??

从java资料中查到有关包与文件组织关系的表明确实如此呀

7.Re:如何根据一个class的文件名,动态的加载class [Re: KevinTian] Copy to clipboard
Posted by: tool
Posted on: 2005-01-11 23:10


import java.io.*;
import java.util.Hashtable;
public class DirectClassLoader extends ClassLoader
{
protected final ClassLoader parent;
private final Hashtable definedClasses = new Hashtable();
public DirectClassLoader()
{
this(DirectClassLoader.class.getClassLoader());
}
public DirectClassLoader(ClassLoader _parent)
{
parent = _parent;
}
protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException
{
Class cls = findLoadedClass(name);
if (cls == null && parent != null)
{
try
{
cls = parent.loadClass(name);
}
catch (ClassNotFoundException e)
{

}
}
if (cls == null)
cls = findClass(name);
if (resolve)
resolveClass(cls);
return cls;
}
public Class loadClass(File file)throws ClassNotFoundException,IOException
{
return loadClass(new FileInputStream(file));
}
public Class loadClass(InputStream in)throws ClassNotFoundException,IOException
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
for(;;)
{
int l = in.read(buf);
if (l <= 0)
break;
out.write(buf,0,l);
}
in.close();
return loadClass(out.toByteArray());
}
public Class loadClass(byte[] b)throws ClassNotFoundException
{
return loadClass(b,0,b.length);
}
public Class loadClass(byte[] b,int off,int len) throws ClassNotFoundException
{
Class cls = defineClass(null,b,off,len);
definedClasses.put(cls.getName(),cls);
return loadClass(cls.getName());
}
protected Class findClass(String name) throws ClassNotFoundException
{
Class cls = (Class)definedClasses.get(name);
if (cls == null)
throw new ClassNotFoundException(name);
else
return cls;
}
}

8.Re:如何根据一个class的文件名,动态的加载class [Re: KevinTian] Copy to clipboard
Posted by: tool
Posted on: 2005-01-11 23:11


import java.io.*;
import java.util.Hashtable;

public class DirectClassLoader extends ClassLoader
{
protected final ClassLoader parent;
private final Hashtable definedClasses = new Hashtable();
public DirectClassLoader()
{
this(DirectClassLoader.class.getClassLoader());
}
public DirectClassLoader(ClassLoader _parent)
{
parent = _parent;
}
protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException
{
Class cls = findLoadedClass(name);
if (cls == null && parent != null)
{
try
{
cls = parent.loadClass(name);
}
catch (ClassNotFoundException e)
{

}
}
if (cls == null)
cls = findClass(name);
if (resolve)
resolveClass(cls);
return cls;
}
public Class loadClass(File file)throws ClassNotFoundException,IOException
{
return loadClass(new FileInputStream(file));
}
public Class loadClass(InputStream in)throws ClassNotFoundException,IOException
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
for( ; ; )
{
int l = in.read(buf);
if (l <= 0)
break;
out.write(buf,0,l);
}
in.close();
return loadClass(out.toByteArray());
}
public Class loadClass(byte[] b)throws ClassNotFoundException
{
return loadClass(b,0,b.length);
}
public Class loadClass(byte[] b,int off,int len) throws ClassNotFoundException
{
Class cls = defineClass(null,b,off,len);
definedClasses.put(cls.getName(),cls);
return loadClass(cls.getName());
}
protected Class findClass(String name) throws ClassNotFoundException
{
Class cls = (Class)definedClasses.get(name);
if (cls == null)
throw new ClassNotFoundException(name);
else
return cls;
}
}

9.Re:如何根据一个class的文件名,动态的加载class [Re: KevinTian] Copy to clipboard
Posted by: littledeer1974
Posted on: 2005-02-08 09:12

楼上的朋友要是能在给点说明就更好了


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923