我是把配置文件放在src下面的,我之前是这样读取的
 pro = new Properties();
         try {
             //读取属性文件
             inputFile = new FileInputStream(filePath);【filepath:  src/a.properties】
             //装载文件
             pro.load(inputFile);
             inputFile.close();
用测试类判断是可以读取到数据的,但是我在控制类里面调用方法提示找不到文件,后来一个朋友帮我改成这样可以了
 pro = new Properties();
         try {
          inputFile = (InputStream) c.getResourceAsStream(filePath);)【filepath:  /a.properties】
我还是不明白其中的原因,请问是怎么回事啊?
还有 他给我提了两点【第一.不能只读取src下的.第二.用什么方法来读取classes下的文件】我有以下几点疑问?一,src下的和classes下面的配置文件是一样的,为什么不可以只读取src下面的?二,我之前的是取的src下面的配置文件,他修改的使用的是classes下的配置文件,对吗?不知道表达清楚没有  请大家帮帮忙O(∩_∩)O~

解决方案 »

  1.   

    JVM执行的是你的.class文件,不是src里面的.java文件,你觉得你的.class文件会去哪里找配置文件呢?
      

  2.   

    java代码最终都是需要编译成class文件的,其实最终访问的并非你src下的配置文件,而是发布到应用服务器中的对应位置的配置文件,文件夹结构一般是这样的  项目名称/WebRoot/WEB-INF/classes/配置文件
      

  3.   

    classes默认为根目录,所以你只需要用/filename.txt来查找就OK了,用src/filename.txt是找不到的
      

  4.   

    这个好像是程序发布到tomcat下面的class文件的数据库连接地址吧、。
      

  5.   

    哦  我明白了 呵呵 谢谢各位  O(∩_∩)O~不过我还有一个问题 为什么我之前的 src/a.properties是可以用的呢?只是当我在控制层调用的时候才报“找不到文件”错误?  
      

  6.   

    那肯定撒都没有执行到这句inputFile = new FileInputStream(filePath);怎么可能报错呢?你这错误又不是编译期的错误。
      

  7.   

    你打开实际执行路径的classes路径下会发现一个a.properties的文件吧,转过去了
      

  8.   

    你可以这样尝试一下:
         pro = new Properties();
           try {
              inputFile = (InputStream) c.getResourceAsStream(filePath);)【filepath: webroot/web-inf/a.properties】//就是简单模拟一个过程,我不知道你的文件具体位置这么写的目的就是找到你的那个绝对目录,这样用Properties才能加载进来,因为如果是javase程序就是本地的相应的包下面的class文件,但是如果是web项目,就会编译到web-inf下面的class里面去,所以当然class就不能通过/src/a.proties这个文件了,你朋友告诉你的方法就是通过类找到相应的配置文件然后在加载进来的。
    同时这也要强调项目目录是不一样的,一用System.getPorperties("user.dir");就会发现,javase项目就是当前目录,但是web项目是tomcat的bin目录