本帖最后由 sunhaodi 于 2012-6-29 16:45 编辑
package EightDemo;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;
/*8、已知一个类,定义如下:
package cn.itcast.heima;
public class DemoClass {
public void run()
{
System.out.println("welcome to heima!");
}
}
(1) 写一个Properties格式的配置文件,配置类的完整名称。
(2) 写一个程序,读取这个Properties配置文件,获得类的完整名称并加载这个类,用反射的方式运行run方法。*/
class Test{
public void run(){
System.out.println("welcome to heima!");
}
}
public class PropertiesDemo {
public static void main(String[] args)throws Exception{
InputStream in= PropertiesDemo.class.getClassLoader()
.getResourceAsStream("prop.properties");
Properties pro = new Properties();
pro.load(in);
in.close();
String className = pro.getProperty("prop");
Class c=Class.forName(className); // 这个报异常 atEightDemo.PropertiesDemo.main(PropertiesDemo.java:46)
Object ob=c.newInstance();
Method m=c.getMethod("run");
m.invoke(ob);
/* Enumeration en = pro.propertyNames();
while (en.hasMoreElements()) {
String key = (String) en.nextElement();
String Property = pro.getProperty(key);
System.out.println(key + Property);
*/
// }
}
}
异常是:
Exception in thread "main" java.lang.ClassNotFoundException: Test
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at EightDemo.PropertiesDemo.main(PropertiesDemo.java:46)
我的配置文件在src目录下prop.properties , 配置文件件里面是prop=Test通过这个配置文件用反射技术并加载上面的run 方法,打印。
配置文件:prop=Test
文件的位置和配置文件里面的东西:
|
|