eclipse项目 打包前后的路径变化

     谨以此文,纪念为了搞清楚eclipse项目路径问题而牺牲的几个小时。

 

   在项目到最后准备部署时,需要将其打包成jar,(用fat-jar来整,方便), 在eclipse中的目录结构是:

  

         PathDemo

                 src

                     |-PropertiesReader.java

                 config

                     |-config.Properties

 在PropertiesReader.java中读取的代码是:(代码1)

FileInputStream fis = new FileInputStream("config/config.properties");
p.load(fis);

 

 

       此时使用的是相对路径, 相对与哪个呢? 当然是项目的根目录(而不是src目录), 如果PathDemo这个项目的路径是E:\workspace\PathDemo, 则以上配置文件的路径就是相对于这个路径的。要获取项目的根目录,可以用System.getProperty("user.dir"),在eclipse里打印出来的就是项目的根目录,但是打包成jar后,这个语句获取的结果就不同了。

     如果所使用的配置文件不在项目目录下,则在run的时候将该文件的路径加入到classpath中,运行的时候的也可以找到该文件。这种方式, 可以将配置文件放在任意目录, 这个时候就不能用上面的代码来找文件了,而是需要用:(代码2)

 

InputStream fis = PropertyFileReader.class.getClassLoader().getResourceAsStream("config.properties");
 

 

       打包成jar后,需要把配置文件单独弄出来,放到和jar同目录下的config文件夹下,以提高配置的灵活性,我以为这个时候再用代码1中的方法去查找文件肯定找不到了,于是我到处找方法,找啊找啊找啊,很多人说先把代码改成代码2的方式, 我改! 然后执行时用java -cp config/config.Properties -jar PathDemo.jar, 不行, 显示找不到. 无解之后最后还是把代码改回代码1的方式一试, 竟然可以!!  原来代码被打成jar包后, 在用相对路径找文件时和在eclipse中运行是不一样的, 此时相对于的是jar包所在的目录, 所以用代码1的方式, 同时将配置文件放在和jar同目录下的config文件夹下, 仍然可以找到该文件. 运行jar包时,如果代码里有System.getProperty("user.dir"), 则此时得到的路径就是jar包所在的目录.

 

    菜菜的总结, 不对的地方, 希望您看到后斧正!

你可能感兴趣的:(eclipse)