运行jar时调用外部的配置文件

langmanchangfeng 2010-11-05 11:27:46
现在有一个项目要将他打包成一个jar,但是我的配置文件想放在外面不想一起打到jar中,以便提高程序的灵活性,请问这个应该怎么做?
...全文
6495 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
javalhl 2012-02-17
  • 打赏
  • 举报
回复
受教,学到,谢谢
langmanchangfeng 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 magong 的回复:]

引用 18 楼 langmanchangfeng 的回复:

Class-Path: kibatch.jar lib/commons-logging-1.1.1.jar lib/junit-4.6.jar lib/KiBatBase.jar lib/log4j-1.2.15.jar lib/ojdbc14.jar jdbc.properties 这个是META-INF中MANIFEST.MF……
[/Quote]

解决了,前面加个.就可以了,真的非常感谢
langmanchangfeng 2010-11-10
  • 打赏
  • 举报
回复
java.util.MissingResourceException: Can't find bundle for base name jdbc, locale ja_JP
不改变原来内部源码的情况下,怎么配置可以执行?内部是直接用的resourcebundle来get的,传过去的参数只有一个名字,没有地址,配置文件在原来的根目录下的时候是可以运行的,但是我现在要把他移出来
magong 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 langmanchangfeng 的回复:]

内部应该是调用的classloader加载的,他的加载的路径的顺序是怎么样的呢?我在classpath里面将配置文件的路径加进去也不行,还是提示找不到文件
[/Quote]
有异常么,看看异常信息吧
caofaping 2010-11-10
  • 打赏
  • 举报
回复

File f = new File(System.getProperty("user.home")+File.separator+"test.propertise");
Properties p = new Properties();
p.load(new FileInputStream(f));

这个不错
langmanchangfeng 2010-11-10
  • 打赏
  • 举报
回复
内部应该是调用的classloader加载的,他的加载的路径的顺序是怎么样的呢?我在classpath里面将配置文件的路径加进去也不行,还是提示找不到文件
magong 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 langmanchangfeng 的回复:]

Class-Path: kibatch.jar lib/commons-logging-1.1.1.jar lib/junit-4.6.jar lib/KiBatBase.jar lib/log4j-1.2.15.jar lib/ojdbc14.jar jdbc.properties 这个是META-INF中MANIFEST.MF中的配置,不管jdbc.properties放在哪(同目录或者lib文件夹)都是提示这个错误
[/Quote]
哎,我说老兄,
你就不会将.加到Class-Path中?
Class-Path: . kibatch.jar lib/commons-logging-1.1.1.jar(后面略)
langmanchangfeng 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 focusforce 的回复:]

在classpath里配置:
方法一:在eclipse里,右键project,选properties,打开java build path,libraties页面,点击add class foader,把配置文件所在的目录添加进来即可;
方法二:直接修改.classpath文件,在<classpath>节点下增加一行:
<classpathentry kind="lib" path="con……
[/Quote]

打包之后的jar应该和Eclipse中的配置没什么关系了吧,.classpath没有被打包到jar中,包中只有生成的class文件
langmanchangfeng 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 magong 的回复:]

引用 15 楼 langmanchangfeng 的回复:
classpath中根目录位置是指哪里?哪个classpath?系统里,清单里也有,不知道运行-jar命令的时候调用的哪个classpath


原来你是桌面应用。

比方说jar包中META-INF中MANIFEST.MF文件中写有
Class-Path: .
的话,则将jdbc_ja_JP.properties和ja……
[/Quote]

Class-Path: kibatch.jar lib/commons-logging-1.1.1.jar lib/junit-4.6.jar lib/KiBatBase.jar lib/log4j-1.2.15.jar lib/ojdbc14.jar jdbc.properties 这个是META-INF中MANIFEST.MF中的配置,不管jdbc.properties放在哪(同目录或者lib文件夹)都是提示这个错误
magong 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 langmanchangfeng 的回复:]
classpath中根目录位置是指哪里?哪个classpath?系统里,清单里也有,不知道运行-jar命令的时候调用的哪个classpath
[/Quote]

原来你是桌面应用。

比方说jar包中META-INF中MANIFEST.MF文件中写有
Class-Path: .
的话,则将jdbc_ja_JP.properties和jar包放一起就行了。
focusforce 2010-11-10
  • 打赏
  • 举报
回复
在classpath里配置:
方法一:在eclipse里,右键project,选properties,打开java build path,libraties页面,点击add class foader,把配置文件所在的目录添加进来即可;
方法二:直接修改.classpath文件,在<classpath>节点下增加一行:
<classpathentry kind="lib" path="config"/>
langmanchangfeng 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 magong 的回复:]

你在classpath中根目录位置上放一个文件
jdbc_ja_JP.properties
就行了。

已部署的应用,该文件直接放classes目录下。项目源码的话,直接放src目录下。
[/Quote]

classpath中根目录位置是指哪里?哪个classpath?系统里,清单里也有,不知道运行-jar命令的时候调用的哪个classpath
magong 2010-11-10
  • 打赏
  • 举报
回复
你在classpath中根目录位置上放一个文件
jdbc_ja_JP.properties
就行了。

已部署的应用,该文件直接放classes目录下。项目源码的话,直接放src目录下。
magong 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 langmanchangfeng 的回复:]

user.dir写相对路径的话由于整个程序已经打包了,会不会在运行的时候出现找不到配置文件这样的错误呢
[/Quote]
是个问题。
比方说,部署到服务器中运行,你需要知道服务器启动的目录,有没有访问权限还是个问题。
放到jar包外,classpath中(即某个classes目录中),用Class.getResourceAsStream来取最好。
langmanchangfeng 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kay5804 的回复:]

哥用的 sysetm.getProperty("user.dir"); 这绝对是你的最佳选择。我以前也碰到过类似的。用这个来加载外部的配置,如xml呀。还有图片路径呀。之类的。完全OK。
[/Quote]
user.dir写相对路径的话由于整个程序已经打包了,会不会在运行的时候出现找不到配置文件这样的错误呢,而且在运行jar的时候系统中的classpath是不是已经不起作用了?
langmanchangfeng 2010-11-09
  • 打赏
  • 举报
回复
现在的情况就是整个程序已经被打包了,但是连接数据库的配置文件是放在外面的,源码不能再改(找不到加载配置文件的地方),请问运行这个jar的时候应该怎么加载这个配置文件,我把这个文件的地址加到jar中的mainifest中还是提示找不到这个文件
Ji秋风 2010-11-05
  • 打赏
  • 举报
回复
通常读取配置文件有两种方式:
一:把配置文件放置在classpath路径的目录下。
二:可以采用相对路径或绝对路径来读取配置文件。

打包在jar中,只是方式一的一种特例而已。
jspwind 2010-11-05
  • 打赏
  • 举报
回复
哥用的 sysetm.getProperty("user.dir"); 这绝对是你的最佳选择。我以前也碰到过类似的。用这个来加载外部的配置,如xml呀。还有图片路径呀。之类的。完全OK。
fkyq01 2010-11-05
  • 打赏
  • 举报
回复
FileInputStream fis = null;
try {
fis = new FileInputStream("文件路径");
Properties prop = new Properties();
prop.load(fis);
prop.getProperty("参数名称");// 得到文件参数值
} finally {
try {
fis.close();
} catch (IOException ex) {
System.out.println(ex.getMessage());
}

}
sxww321 2010-11-05
  • 打赏
  • 举报
回复
噢,看错,配置文件已经有了,你设置好读取路径就OK了,绝对路径和相对路径都可以,个人认为相对路径更灵活一些。
加载更多回复(2)

62,614

社区成员

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

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