关于jar和配置文件的路径的问题,请高手解答,200分献上。

奇伢 2007-07-07 01:32:33
恩,有好几个问题一直没有搞清楚,哪为大人帮忙解释下。

我用eclipse开发。src
|____packagename--*.java
|_____config.properties
|_____applicationContext.xml
上面是目录结构,配置文件都放在src目录下。
类中加载配置文件代码:
contextPaths = new String[] {"applicationContext.xml"};
ctx = new ClassPathXmlApplicationContext(contextPaths);
读取配置文件
URL path = ClassLoader.getSystemResource("config.properties");
pro.load(new FileInputStream(path.toURI().getPath()));
在eclipse调试的时候一切正常。

但是,当我发布的时候把.class文件都放到jar里面,我不想把配置文件,包括Spring的配置文件都放入和jar同级的目录,结构如下。
folder
|_____demo.jar
|_____aplicationContext.xml
|_____config.properties
|_____lib目录

所有有几个问题:
1.我要把配置文件放到jar同级的目录,我上面的读取配置文件的代码,应该怎么修改?

2.我试着把配置文件一起打包的jar文件中,Spring的配置文件正常,但是读取properties的代码URL path = ClassLoader.getSystemResource("config.properties");
pro.load(new FileInputStream(path.toURI().getPath()));
出错,提示。demo.jar!/config.properties找不到。

搞不太清楚,这些路径到底什么关系。。。请高手解答。
...全文
1625 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
summerice110 2007-07-10
  • 打赏
  • 举报
回复
mark
shan1119 2007-07-10
  • 打赏
  • 举报
回复
另外,你是以src打包还是以packagename为根目录的,应该也有影响的吧.

我的理解是,只要文件目录结构一致了,其他的不用考虑.
shan1119 2007-07-10
  • 打赏
  • 举报
回复
建一个src文件夹,把配置文件放入,结构跟打包前完全一致.跟工程的结构也要一致.应该没有问题,代码测试过的话不用修改.
愤怒的小蒋 2007-07-10
  • 打赏
  • 举报
回复
ls。。。。
奇伢 2007-07-10
  • 打赏
  • 举报
回复
结贴了,多谢各位,对这个问题加深不少影响。
奇伢 2007-07-10
  • 打赏
  • 举报
回复
恩,而且绝对路径问题,也不是个好处理的问题。有些绝对路径中包含空格或是中文好像都有点问题。
jianghuxiaoxiami 2007-07-10
  • 打赏
  • 举报
回复
mark
jccjbb 2007-07-10
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/5642/5642097.xml?
charleswu82 2007-07-09
  • 打赏
  • 举报
回复
mark
奇伢 2007-07-08
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/5642/5642873.xml?temp=8.073062E-02
奇伢 2007-07-08
  • 打赏
  • 举报
回复
我另开一贴,问下这个Spring的问题。
wafer_lee 2007-07-08
  • 打赏
  • 举报
回复
用绝对路径,虽然麻烦点 但"一捞永逸"
奇伢 2007-07-07
  • 打赏
  • 举报
回复
恩,得到了的绝对路径,问题大部分解决了。

只是有点麻烦好像,我在eclipse调试的时候是个路径,然后我打包成jar又是个路径,能不能不改变程序?

还有使用了Spring的ResourceBundleMessageSource,但是同样路径问题,message.properties放到src中没有问题,但是,放到src同一级目录的话,<value>message</value>这个地方怎么写?
有办法?

<bean id="messageSource" class="org.springframework.context.support.Resourc eBundleMessageSource">
<property name="basename"><value>message</value></property>
</bean>
Inhibitory 2007-07-07
  • 打赏
  • 举报
回复
比如工程文件夹名字叫JPro,下面有文件夹src,this.getClass().getClassLoader()取得的是JPro这个文件夹处的位置。
奇伢 2007-07-07
  • 打赏
  • 举报
回复
还有这个:InputStream is = this.getClass().getClassLoader().getResourceAsStream("src" + fileSeparator + "packageName" + fileSeparator + "fileName");

我的文件就和Src在同层次路径,我应该是InputStream is = this.getClass().getClassLoader().getResourceAsStream(filename).但是不成功。还是说找不到文件。
奇伢 2007-07-07
  • 打赏
  • 举报
回复
ctx = new ClassPathXmlApplicationContext(contextPaths);
这个不是可以在读取ClassPath路径中的文件吗?可不可以理解?
我的意思,是不是可以在demo.jar的MANIFEST.MF文件中class-path中加入applicationContext.xml,然后打包的时候,不把上面提到的配置文件加入到jar中,把这些文件放到和demo.jar同目录。

to zxh2208180(九天玄狐):恩,不是很熟悉,照着文档,第一次在使用Spring.刚才没有理解到你的意思,绝对路径应该可以实现的。我试试...


Inhibitory() :如果程序有什么问题,请帮忙指出。

多谢二位的耐心。。。
lynn0354 2007-07-07
  • 打赏
  • 举报
回复
天啊!杂你们说的我都不懂呢?
zxh2208180 2007-07-07
  • 打赏
  • 举报
回复
ApplicationContext context = new FileSystemXmlApplicationContext("这里也可以是绝对路径");
(...)context.getBean("...");
zxh2208180 2007-07-07
  • 打赏
  • 举报
回复
看来你spring用的不是很好啊
Resource rs = new FileSystemResource("这里可以是绝对路径");
BeanFactory factory = new XmlBeanFactory(rs);
接口 hello = (接口)factory.getBean("hello");
Inhibitory 2007-07-07
  • 打赏
  • 举报
回复
Inhibitory() 说的,没有完全满足要求,我已经做成jar了,怎么处理?而且Spring读取配置文件怎么修改呢?
---------------------------------
这没办法了,你的程序里面的写法就不对,当然没办法了,因为程序里读取的代码就错了,外面怎么做也不行。
加载更多回复(5)

62,615

社区成员

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

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