本帖最后由 郭彦君 于 2013-4-8 23:16 编辑
用反射获取配置文件的类名,然后进行操作。代码如下- class ReflectionClass{
- public static void main(String [] args) throws Exception{
- //创建一个读取流,关联配置文件.注意:在实际开发中一般不会用相对路径来获取配置文件。
- InputStream is = new FileInputStream("config.properties");
- //为了验证是否关联成功,将数据读到缓冲区,并打印。
- byte [] buf = new byte[1024];
- int len = is.read(buf);
- for (int i=0; i<len; i++) {
- System.out.print(buf[i]);
- }
- //创建properties对象
- Properties p = new Properties();
- //加载文件中的内容
- p.load(is);
- is.close();
- //获取配置信息中键值对的值,得到类名
- String className = p.getProperty("className");
- //创建该类的对象
- Collection collections = (Collection) Class.forName("className").newInstance();
- collections.add("abc");
- collections.add("bbc");
- collections.add("abc");
- System.out.println(collections.size());
- }
- }
复制代码 发现两个问题
1、我将配置文件放到和这个类相同的目录下,用相对路径就会出现无法找到文件异常,只能用绝对路径,为什么视频中就可以用相对路径
配置文件内容:className=java.util.ArrayList
异常信息:Exception in thread "main" java.io.FileNotFoundException: config.properties (系统找不到指定的文件。) at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at lann.Day2.ReflectionClass.main(ReflectionClass.java:246)//行号不一样,因为我文件中的还有其他代码,复制的不全。
2、如果我改成绝对路径后,配置信息可以读取到,但是又出现下面的异常
Exception in thread "main" java.lang.ClassNotFoundException: className
这又是为什么?
搞的头都大了,大神们帮忙看看,谢了
|
|