我正在創建一個可執行JAR,它將在運行時從文件中讀取一組屬性。該目錄結構是這樣的:從JAR目錄中讀取屬性文件
/some/dirs/executable.jar
/some/dirs/executable.properties
有沒有在executable.jar文件設置該屬性加載類的方式來加載從罐子中,而不是硬編碼的目錄屬性目錄。
我不想將屬性放入jar本身,因爲屬性文件需要配置。
我正在創建一個可執行JAR,它將在運行時從文件中讀取一組屬性。該目錄結構是這樣的:從JAR目錄中讀取屬性文件
/some/dirs/executable.jar
/some/dirs/executable.properties
有沒有在executable.jar文件設置該屬性加載類的方式來加載從罐子中,而不是硬編碼的目錄屬性目錄。
我不想將屬性放入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文件中的一個類。這不是我推薦的,但是 - 如果你的應用程序在不同jar文件的類路徑中有多個MyClass
實例(不同目錄中的每個jar)?即你永遠不能真的保證MyClass
是從你認爲是的jar中加載的。
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");
}
}
http://stackoverflow.com/questions/775389/accessing-properties-files-outside-the-jar的可能重複 – 2010-04-01 20:39:38