ดังนั้นคุณต้องการจัดการ.properties
ไฟล์ของคุณในโฟลเดอร์เดียวกันกับ jar หลัก / runnable เป็นไฟล์แทนที่จะเป็นทรัพยากรของ jar หลัก / runnable ในกรณีนั้นวิธีแก้ปัญหาของฉันเองมีดังนี้:
สิ่งแรกแรก: สถาปัตยกรรมไฟล์โปรแกรมของคุณจะต้องเป็นแบบนี้ (สมมติว่าโปรแกรมหลักของคุณคือ main.jar และไฟล์คุณสมบัติหลักคือ main.properties):
./ - the root of your program
|__ main.jar
|__ main.properties
ด้วยสถาปัตยกรรมนี้คุณสามารถแก้ไขคุณสมบัติใด ๆ ในไฟล์ main.properties โดยใช้โปรแกรมแก้ไขข้อความใด ๆ ก่อนหรือในขณะที่ main.jar ของคุณกำลังทำงานอยู่ (ขึ้นอยู่กับสถานะปัจจุบันของโปรแกรม) เนื่องจากเป็นเพียงไฟล์แบบข้อความ ตัวอย่างเช่นไฟล์ main.properties ของคุณอาจมี:
app.version=1.0.0.0
app.name=Hello
ดังนั้นเมื่อคุณเรียกใช้โปรแกรมหลักจากโฟลเดอร์รูท / ฐานโดยปกติคุณจะเรียกใช้งานในลักษณะนี้:
java -jar ./main.jar
หรือทันที:
java -jar main.jar
ใน main.jar ของคุณคุณต้องสร้างเมธอดยูทิลิตี้สองสามอย่างสำหรับทุกคุณสมบัติที่พบในไฟล์ main.properties ของคุณ สมมติว่าapp.version
คุณสมบัติจะมีgetAppVersion()
วิธีการดังนี้:
/**
* Gets the app.version property value from
* the ./main.properties file of the base folder
*
* @return app.version string
* @throws IOException
*/
import java.util.Properties;
public static String getAppVersion() throws IOException{
String versionString = null;
//to load application's properties, we use this class
Properties mainProperties = new Properties();
FileInputStream file;
//the base folder is ./, the root of the main.properties file
String path = "./main.properties";
//load the file handle for main.properties
file = new FileInputStream(path);
//load all the properties from this file
mainProperties.load(file);
//we have loaded the properties, so close the file handle
file.close();
//retrieve the property we are intrested, the app.version
versionString = mainProperties.getProperty("app.version");
return versionString;
}
ในส่วนใด ๆ ของโปรแกรมหลักที่ต้องการapp.version
ค่าเราเรียกวิธีการดังต่อไปนี้:
String version = null;
try{
version = getAppVersion();
}
catch (IOException ioe){
ioe.printStackTrace();
}
user.home
เมื่อตรวจสอบไฟล์ก่อนอื่นให้ตรวจสอบการมีอยู่ของ ไฟล์ที่เปลี่ยนแปลงในระบบไฟล์และหากไม่มีอยู่ให้โหลดไฟล์เริ่มต้น " BTW "ฉันไม่ต้องการ .. "สิ่งที่คุณต้องการมีความสำคัญน้อยกว่าสิ่งที่ได้ผลและใช้ได้จริง กำลังจัดเก็บแอป การตั้งค่าในไดเร็กทอรีแอปพลิเคชันไม่ได้รับการสนับสนุนอย่างยิ่งจากทั้ง Oracle & MS (และอาจเป็นอย่างอื่น)