为什么读取不到config.properties文件?求大神指点

java小白噢噢 2018-04-19 01:21:54
package com.hanmin.demo3;


import java.io.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Properties;

/**
* 反射配置文件-不用改源代码,只改配置文件就可以实现不同类不同方法
* 调用Person方法,调用Student方法,调用Worker方法
* 类不清楚,方法也不清楚,通过配置文件实现此功能
*
* 运行的类名和方法名字,以键值对的形式,写在文本中
* 运行哪个类和方法,修改配置文件即可
*
* 实现步骤:
* 1.准备配置文件,键值对
* 2.IO流读取配置文件 Reader
* 3.文件中的键值对存储到集合中 Properties
* 集合保存的键值对,就是类名和方法名
* 4.反射获取指定类的class文件对象
* 5.class文件对象,获取指定方法
* 6.运行方法
* @author Hanmin
*/


public class ReflecDemo2 {
public static void main(String[] args) throws Exception{
//用IO流读取文件
FileReader fr = new FileReader("config.properties");
//创建集合对象
Properties p = new Properties();
p.load(fr);
fr.close();
//通过键获取值
String className = p.getProperty("className");
String methodName = p.getProperty("methodName");
//反射获取指定类的class文件
Class c = Class.forName(className);
//反射获取指定构造方法,创建对象
Constructor con = c.getConstructor(null);
Object obj = con.newInstance(null);
//用反射获取指定方法
Method m = c.getMethod(methodName, null);
//运行该方法
m.invoke(obj, null);


}
}



报错:
Exception in thread "main" java.io.FileNotFoundException: config.properties (系统找不到指定的文件。)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(Unknown Source)
at java.base/java.io.FileInputStream.<init>(Unknown Source)
at java.base/java.io.FileInputStream.<init>(Unknown Source)
at java.base/java.io.FileReader.<init>(Unknown Source)
at com.hanmin.demo3.Test.main(Test.java:25)

为什么读取不到config.properties文件?求大神指点,config.properties文件放在如下图所示位置,是路径对吗?

里面的内容如下:
className=com.hanmin.demo3.Person
methodName=eat
...全文
1839 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
空气中我最帅 2018-04-20
  • 打赏
  • 举报
回复
我之前有一次也是,大概率是文件存放的位置不对,建议放到java/resource里
gxcityboy 2018-04-20
  • 打赏
  • 举报
回复
我自己项目上的代码,直接贴给你吧,希望能帮到你,如下: import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class BaseCfgPar { public Properties prop = new Properties(); public InputStream inputStream = null; public boolean loadCfgfileSuccessed = false; public BaseCfgPar(String propertiesFileName ){ inputStream = getClass().getResourceAsStream(propertiesFileName); if ( inputStream != null ) { try { prop.load(inputStream); loadCfgfileSuccessed = true; } catch (IOException e) { } } } } public class Cfgpar extends BaseCfgPar{ private static Cfgpar cfgpar = new Cfgpar("/conf/config.properties"); //指定属性文件的路径,我用maven构建,完整目录是:src/main/resources/conf/config.properties private long jkp_duration; private String sip_address; public String getSip_address() { return sip_address; } public long getJkp_duration() { return jkp_duration; } public static Cfgpar getInstance(){ return cfgpar; } public Cfgpar(String propertiesFileName) { super(propertiesFileName); if ( loadCfgfileSuccessed ){ if ( prop.containsKey("jkp_duration") ){ jkp_duration =Integer.valueOf(prop.getProperty("jkp_duration")); } if (prop.containsKey("sip_address")) { sip_address = prop.getProperty("sip_address"); } } } }
hi-face 2018-04-20
  • 打赏
  • 举报
回复
weixin_41368339 2018-04-20
  • 打赏
  • 举报
回复
路径不对呗,还能怎么样
Coli薇 2018-04-19
  • 打赏
  • 举报
回复
路径写绝对路劲把,文件没有找到
sjjk 2018-04-19
  • 打赏
  • 举报
回复
FileReader参数里面是要绝对路径:new FileReader(ReflecDemo2.class.getResource("/").getPath()+"config.properties"); 如果要用相对路径的话应该是: pro.load(ReflecDemo2.class.getClassLoader().getResourceAsStream("config.properties"));
阿闰 2018-04-19
  • 打赏
  • 举报
回复
把文件放到resource目录试试
QWERT4745 2018-04-19
  • 打赏
  • 举报
回复
读取不到就是路径不对,先把文件放到绝对路径试下FileReader fr = new FileReader("d:/config.properties"); 那你那样写那么config.properties和你当前java文件必须在同一目录

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧