今天做java练习的时候遇到一个问题,就是利用FlieReader来读取properties文件,结果显示系统找不到路径。
具体代码如下:
package cn.viewda.demo3;
import java.io.FileReader;
import java.lang.reflect.Method;
import java.util.Properties;
/*
* 调用Person方法,调用Student方法,调用Worker方法
* 类不清楚,方法也不清楚
* 通过配置文件实现此功能
* 运行的类名和方法名字,以键值对的形式,写在文本中
* 运行哪个类,读取配置文件即可
* 实现步骤:
* 1. 准备配置文件,键值对
* 2. IO流读取配置文件 Reader
* 3. 文件中的键值对存储到集合中 Properties
* 集合保存的键值对,就是类名和方法名
* 4. 反射获取指定类的class文件对象
* 5. class文件对象,获取指定的方法
* 6. 运行方法
*/
public class Test {
public static void main(String[] args) throws Exception{
//IO流读取配置文件
FileReader r = new FileReader("config.properties");
//创建集合对象
Properties pro = new Properties();
//调用集合方法load,传递流对象
pro.load(r);
r.close();
//通过键获取值
String className = pro.getProperty("className");
String methodName = pro.getProperty("methodName");
//反射获取指定类的class文件对象
Class c = Class.forName(className);
Object obj = c.newInstance();
//获取指定的方法名
Method method = c.getMethod(methodName);
method.invoke(obj);
}
}
package cn.viewda.demo3;
public class Person {
public void eat() {
System.out.println("人在吃饭");
}
}
以下是config.properties文件
className=cn.viewda.demo3.Person
methodName=eat
结果显示以下错误:
Exception in thread "main" java.io.FileNotFoundException: config.properties (系统找不到指定的文件。)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)at cn.viewda.demo3.Test.main(Test.java:25)
我在网上找了一下,看到了这篇文章.
依照下列方法可以重新读取到:
1.方法一
InputStream fis =TestProperties.class.getClassLoader().getResourceAsStream(“init.properties”)2.方法二(要求TestProperties和init.properties在同一目录下)
InputStream fis =TestProperties.class.getResourceAsStream(“init.properties”)3.方法三,对于Web工程也可以这样。
先获取ServletContext,然后InputStream in=context.getResourceAsStream(“/WEB-INF/classes/init.properties”);
这里我用的是第二种方法,结果运行成功: