java 的配置文件问题

sky123123 2010-03-11 05:41:40
为了增加系统的灵活性和易移植性,我想通过读取外部资源文件(proterties文件)的方式来获取信息,比如数据库的连接信息

如何能让jar文件读取当前目录下的配置文件信息呢,请大家帮个忙吧,试了很多种方式都不行啊


先谢谢各位大牛们了 O(∩_∩)O~
...全文
162 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky123123 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dazzlingwinter 的回复:]
给你贴一个log4j的测试用例,新建一java Proj
包结构在下面的java类中可以很明显的看到,将log4j.properties放在src目录下(如果用文件夹查看,双击src文件夹,打开就可以看到),将log4j.jar加入Proj编译环境,一下是测试代码
Java codepackage com.jankey.log;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;publicclass Log {
@SuppressWarnings("unused")public Logger loger;privatestatic Log log;private Log() {
String filePath=this.getClass().getResource("/").getPath();
filePath= filePath.substring(1).replace("bin","src");
loger= Logger.getLogger(this.getClass());
PropertyConfigurator.configure(filePath+"log4j.properties");
}publicstatic Log getLoger() {if (null!= log) {return log;
}else {returnnew Log();
}
}
}package com.jankey.testLog;import com.jankey.log.Log;publicclass LogTest {private Log log= Log.getLoger();publicvoid info(Object obj) {
log.loger.info(obj);
}publicstaticvoid main(String[] args) {
LogTest lt=new LogTest();try {int i=0;int[] a=newint[]{0,1,2,3,4};
i= a[10];
}catch(Exception ex) {
lt.info(ex);
ex.printStackTrace();
}
}
}
log4j.properties内容:
log4j.rootLogger=DEBUG, R
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.file=D:/logs/Debug.log
log4j.appender.R.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.R.Append=true
log4j.appender.R.ImmediateFlush=true
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%n%n%d%p[%c]-%m%n
[/Quote]

谢谢,上面的这段代码我有了,我的本意是想把log4j.xml放在src之外的一个目录,怎么办呢,
sky123123 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 liguang168 的回复:]
我没有修改过,我记得在哪里看到过,可以修改,但比较麻烦。
至于这个问题还要问做过的人。要不自己做个例子测试一下。哈哈。
你自己试试吧。
[/Quote]

String filePath = System.getProperty("user.dir");

用这句话,可以指定资源文件的相对目录了,就不必吧资源文件打在jar文件内了,这样就可以方便的修改资源文件信息了,比如可以随意修改驱动名称,url,password等等,方便多了,比一前
Dazzlingwinter 2010-03-12
  • 打赏
  • 举报
回复
给你贴一个log4j的测试用例,新建一java Proj
包结构在下面的java类中可以很明显的看到,将log4j.properties放在src目录下(如果用文件夹查看,双击src文件夹,打开就可以看到),将log4j.jar加入Proj编译环境,一下是测试代码

package com.jankey.log;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class Log {
@SuppressWarnings("unused")
public Logger loger;
private static Log log;
private Log() {
String filePath = this.getClass().getResource("/").getPath();
filePath = filePath.substring(1).replace("bin", "src");
loger = Logger.getLogger(this.getClass());
PropertyConfigurator.configure(filePath + "log4j.properties");
}

public static Log getLoger() {
if (null != log) {
return log;
} else {
return new Log();
}
}
}
package com.jankey.testLog;

import com.jankey.log.Log;

public class LogTest {
private Log log = Log.getLoger();
public void info(Object obj) {
log.loger.info(obj);
}
public static void main(String[] args) {
LogTest lt = new LogTest();
try {
int i = 0;
int[] a = new int[]{0, 1, 2, 3, 4};
i = a[10];
}catch(Exception ex) {
lt.info(ex);
ex.printStackTrace();
}
}
}
log4j.properties内容:
log4j.rootLogger=DEBUG, R
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.file=D:/logs/Debug.log
log4j.appender.R.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.R.Append=true
log4j.appender.R.ImmediateFlush=true
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%n%n%d%p[%c]-%m%n
liguang168 2010-03-12
  • 打赏
  • 举报
回复
我没有修改过,我记得在哪里看到过,可以修改,但比较麻烦。
至于这个问题还要问做过的人。要不自己做个例子测试一下。哈哈。
你自己试试吧。
sky123123 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liguang168 的回复:]
System.getProperty("user.dir")这个不是取你当前目录吗?

如果没有改资源文件就提示找不到资源文件? =》你的意思,资源文件没有修改要提示找不到?

那你记载一次最后修改时间吧,比较一下就知道了。

我真不知道为什么不能修改资源文件。
[/Quote]

打在jar包中的文件能修改吗, 不要重新编译的话
liguang168 2010-03-12
  • 打赏
  • 举报
回复
System.getProperty("user.dir")这个不是取你当前目录吗?

如果没有改资源文件就提示找不到资源文件? =》你的意思,资源文件没有修改要提示找不到?

那你记载一次最后修改时间吧,比较一下就知道了。

我真不知道为什么不能修改资源文件。
sky123123 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liguang168 的回复:]
proterties文件在JAR包中,还是与JAR包同一级目录。同一级目录就不用我说了吧。
ResourceBundle读资源文件
class.getClassLoader().getResource()这个方法去获取JAR包中的文件路径。
不知道是我理解的问题还是什么。
先说这么一点。
[/Quote]

说的也对,我的意思是建一个JavaProtect项目,它有个src文件夹,一般的资源文件都是放在这个目录下的,但是打包后就把它打在jar包内了,这个资源文件的内容就无法更改了,不太具有灵活性,我想把资源文件放在src之外的目录,当运行jar文件时,让jar文件区到某一路径下寻找资源文件(如与jar文件处于同一目录,要用相对路径哦),如果没有改资源文件就提示找不到资源文件,这样的话,我们就可以方便的更改资源文件的信息了

我这样表述不知你能否理解 ? 呵呵 谢谢你
lryxxh 2010-03-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liguang168 的回复:]
proterties文件在JAR包中,还是与JAR包同一级目录。同一级目录就不用我说了吧。
ResourceBundle读资源文件
class.getClassLoader().getResource()这个方法去获取JAR包中的文件路径。
不知道是我理解的问题还是什么。
先说这么一点。
[/Quote]up
lryxxh 2010-03-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sky123123 的回复:]
引用 1 楼 happy_0201 的回复:
当然没问题了,我觉得还是xml好,可以实现 复杂的需求。。。


能说下怎么实现的吗,xml文件格式的也行

给个例子参考下, 好吗 多谢了
[/Quote]up
liguang168 2010-03-11
  • 打赏
  • 举报
回复
proterties文件在JAR包中,还是与JAR包同一级目录。同一级目录就不用我说了吧。
ResourceBundle读资源文件
class.getClassLoader().getResource()这个方法去获取JAR包中的文件路径。
不知道是我理解的问题还是什么。
先说这么一点。
sky123123 2010-03-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happy_0201 的回复:]
当然没问题了,我觉得还是xml好,可以实现 复杂的需求。。。
[/Quote]

能说下怎么实现的吗,xml文件格式的也行

给个例子参考下, 好吗 多谢了
happy_0201 2010-03-11
  • 打赏
  • 举报
回复
当然没问题了,我觉得还是xml好,可以实现 复杂的需求。。。

62,614

社区成员

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

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