从JAR目录读取属性文件

保险业监督€™米建立一个可执行的JAR,它将从文件中读取的一组属性在运行时。 该目录结构是这样的:

/some/dirs/executable.jar /some/dirs/executable.properties

有没有设置属性的类装载器在executable.jar文件从罐子中,而不是硬编码的目录的目录加载的属性的一种方式。

我不想把物业罐子本身的属性文件需要配置。

--------------解决方案-------------

为什么不只是传递属性文件作为参数传递给你的主要方法是什么? 这样,你可以加载属性如下:

public static void main(String[] args) throws IOException {
Properties props = new Properties();
props.load(new BufferedReader(new FileReader(args[0])));
System.setProperties(props);
}

另一种选择:如果你希望得到您的jar文件的当前目录下,你需要做一些讨厌的,如:

CodeSource codeSource = MyClass.class.getProtectionDomain().getCodeSource();
File jarFile = new File(codeSource.getLocation().toURI().getPath());
File jarDir = jarFile.getParentFile();

if (jarDir != null && jarDir.isDirectory()) {
File propFile = new File(jarDir, "myFile.properties");
}

...其中MyClass是一类从您的jar文件。 这不是我建议,但-如果你的应用程序有多个MyClass在不同的jar文件的类路径(在不同的目录中的每个JAR)实例? 也就是说你永远无法真正保证MyClass是从你认为这是罐子里装。

public static void loadJarCongFile(Class Utilclass )
{
try{
String path= Utilclass.getResource("").getPath();
path=path.substring(6,path.length()-1);
path=path.split("!")[0];
System.out.println(path);
JarFile jarFile = new JarFile(path);

final Enumeration<JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements()) {
final JarEntry entry = entries.nextElement();
if (entry.getName().contains(".properties")) {
System.out.println("Jar File Property File: " + entry.getName());
JarEntry fileEntry = jarFile.getJarEntry(entry.getName());
InputStream input = jarFile.getInputStream(fileEntry);
setSystemvariable(input);
InputStreamReader isr = new InputStreamReader(input);
BufferedReader reader = new BufferedReader(isr);
String line;

while ((line = reader.readLine()) != null) {
System.out.println("Jar file"+line);
}
reader.close();
}
}
}
catch (Exception e)
{
System.out.println("Jar file reading Error");
}
}
public static void setSystemvariable(InputStream input)
{
Properties tmp1 = new Properties();
try {
tmp1.load(input);

for (Object element : tmp1.keySet()) {
System.setProperty(element.toString().trim(),
tmp1.getProperty(element.toString().trim()).trim());
}
} catch (IOException e) {
System.out.println("setSystemvariable method failure");
}
}

分类:java的 时间:2015-03-15 人气:0
本文关键词: 性能,JAVA,路径,罐子
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.264 (s). 10 q(s)