JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。为 J2EE 应用程序创建的 JAR 文件是 EAR 文件(企业 JAR 文件),当然JAR格式是以目前较为流行的ZIP格式为基础,因此ZIP压缩,解压软件可以直接打开JAR文件,查看其内部文件信息。
一个包含了主类的JAR文件可以通过Java命令执行运行,有如下问题:
1.想要传入参数;
2.想要返回信息,并记录
解决这个问题的方式比较了,数据库记录,写入文件,或者命令执行时添加参数等。
今天遇到的问题是:运行JAR文件,获取外部数据作为参数,运行过程中修改参数值,结束运行时保存参数值,待下一次运行是使用该参数值。
问题归纳:
JAR文件运行,与外部进行少了数据交互,并且数据具有持久性。
总结下来就是配置文件能够被正确读取,并且能正确写入新的数据。这将面临一个很重要的问题:配置文件的路径。
路径可以使用绝对路径和相对路径,当然为了保存JAR文件能够正常在任意位置执行,不依赖CLASSPATH,不依赖工程环境,这就要使用到Java提供的系统属性。
下面是对系统属性做简单测试,以确保行对路径的正确性。
分析:
test1-1.0.jar是可执行的Jar包,其在 target 目录下。
test1-1.0.jar中的main方法的代码如下:
1
2
3
4
|
public
static
void
main(String [] args){
System.out.println(
"user.home:"
+System.getProperty(
"user.home"
));
System.out.println(
"user.dir"
+System.getProperty(
"user.dir"
));
}
|
从打印输出的结果看,使用系统属性中key="user.dir"将表示Jar文件所在的路径,因此可以在Jar中使用到配置文件的地方使用系统属性信息,使得配置文件的路径将是一个相对的路径。
例如在实际代码中的应用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
File config =
new
File(System.getProperty(
"user.dir"
) + File.separator
+
"ccs.Properties"
);
Properties p =
new
Properties();
try
{
if
(config.exists()) {
System.out.println(
"Load Config ccs.Properties File ..."
);
p.load(
new
FileInputStream(config));
}
else
{
System.out.println(
"Load Default Constant Config ..."
);
}
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
|
这样使用Properties对象来与外部文件进行少量的数据交互,从而解决了参数问题,临时小数据保存问题。
本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1282536,如需转载请自行联系原作者