我在action里想要获取一个properties的配置文件,但一直提示找不到系统文件的路径
代码:
private static GetResultService grs = null;
// private static GetProperitysAndDatesService gpd=null;
static {
try {

Properties pro = new Properties();
InputStream ipt = new FileInputStream("src/factoryConfig.properties");
                                      
pro.load(ipt);
System.out.println(pro.getProperty("AddressDao"));
grs = (GetResultService) ObjectFactory
.getObjectFactory(pro.getProperty("GetResultService"));

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
运行异常:
om.Service.ServiceImpl.CompanyServiceImpl
java.io.FileNotFoundException: src\factoryConfig.properties (系统找不到指定的路径。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at com.Service.ServiceImpl.CompanyServiceImpl.<clinit>(CompanyServiceImpl.java:23)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.Service.ObjectFactory.getObjectFactory(ObjectFactory.java:9)
at com.Action.RegCompany.<clinit>(RegCompany.java:22)
at sun.misc.Unsafe.ensureClassInitialized(Native Method)
at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(Unknown Source)
at sun.reflect.ReflectionFactory.newFieldAccessor(Unknown Source)
at java.lang.reflect.Field.acquireFieldAccessor(Unknown Source)
at java.lang.reflect.Field.getFieldAccessor(Unknown Source)
at java.lang.reflect.Field.set(Unknown Source)
at org.apache.catalina.loader.WebappClassLoader.clearReferences(WebappClassLoader.java:1617)
at org.apache.catalina.loader.WebappClassLoader.stop(WebappClassLoader.java:1497)
at org.apache.catalina.loader.WebappLoader.stop(WebappLoader.java:707)
at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4550)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3093)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:404)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1309)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
at java.lang.Thread.run(Unknown Source)但我把那代码放到另一个类里的main()方法里,就可以获取到配置文件
代码:
try {
Properties pro = new Properties();
InputStream ipt = new FileInputStream("src/factoryConfig.properties");
                                      
pro.load(ipt);
String className = pro.getProperty("GetResultService");
Object object = null;
object =  ObjectFactory
.getObjectFactory(className);

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这是什么问题呢,想不明白呀

解决方案 »

  1.   

    InputStream ipt = this.getClass().getClassLoader().getResource(("src/factoryConfig.properties").openStream();
      

  2.   

    InputStream ipt = new FileInputStream("factoryConfig.properties"); 
      

  3.   

    都错.Properties 解析的要绝对路径.
    String filePath = System.getProperty("user.dir")+File.separator+"src/factoryConfig.properties";
    InputStream ipt = new FileInputStream(filePath); 
      

  4.   


    他们不对,你也不对呀,你这样是获取编译工具的路径呀,我的IDE在G盘,但工程目录在D盘呀
      

  5.   


    控制台获取出来的路径就是工程的路径,但在tomcate上运行,路径就变成编译工具的路径了在控制台获取的和在tomcate获取的路径不一样呀,怎么在tomcate里获取到工程的src的路径呀???
      

  6.   

    用这个(factoryConfig.properties放到任意的classpath下即可,如WEB-INF\classes):
    InputStream ipt = this.getClass().getClassLoader().getResourceAsStream("/factoryConfig.properties");
      

  7.   

    InputStream ipt = this.getClass().getClassLoader().getResourceAsStream("/factoryConfig.properties");
    up,刚刚做过这个
      

  8.   

    InputStream is = getClass().getResourceAsStream(
    "/cache_option.properties");