يمكن أن تحتوي قائمة الخصائص على قائمة خصائص أخرى باعتبارها "القيمة الافتراضية" الخاصة بها؛ وإذا لم يتم العثور على مفتاح الخاصية في قائمة الخصائص الأصلية، فسيتم البحث في قائمة الخصائص الثانية.
نظرًا لأن الخصائص ترث من Hashtable، فيمكن تطبيق أساليب put وputAll على كائن Properties. ومع ذلك، لا يُنصح باستخدام هاتين الطريقتين لأنهما تسمحان للمتصل بإدراج عناصر ليست مفاتيحها أو قيمها عبارة عن سلاسل. بدلاً من ذلك، استخدم الأسلوب setProperty. إذا تم استدعاء أسلوب التخزين أو الحفظ على كائن خصائص "غير آمن" (أي يحتوي على مفتاح أو قيمة غير سلسلة)، فسوف يفشل الاستدعاء. وبالمثل، إذا تم استدعاء خاصية propertyNames أو أسلوب القائمة على كائن خصائص "غير آمن" (أي يحتوي على مفتاح غير سلسلة)، فسوف يفشل الاستدعاء.
غالبًا ما تكون ملفات الخصائص مرئية في تطبيقات JAVA وهي أيضًا نوع مهم بشكل خاص من الملفات. يتم استخدامه لتكوين بعض المعلومات الخاصة بالتطبيق، لكن هذه المعلومات بشكل عام عبارة عن بيانات صغيرة نسبيًا، وليست هناك حاجة لاستخدام ملف قاعدة بيانات لحفظها، ولكن استخدم ملفًا نصيًا عامًا لحفظها إذا تم حفظها مباشرة من خلال File ، قد يكون من غير المناسب قراءته وتخزينه، ولكن الأمر مختلف إذا تم حفظه كملف خصائص. تحتوي ملفات الخصائص على قيم مفاتيح مقابلة . هذه الفئة هي فئة java.uitl.Properties نظرًا لأن فئة Properties هي فئة مجموعة، فستقوم الخصائص بقراءة الخصائص وكتابتها في المجموعة.
ملحوظة: الكود التالي لا يلتقط الاستثناءات التي تم طرحها، عند كتابة البرنامج، يجب الانتباه إلى التقاط الاستثناءات.
ترث فئة الخصائص فئة Hashtable وتعتمد طريقة تخزين تتوافق مع القيم الأساسية. ما هي الراحة عند استخدام فئة الخصائص لإدارة ملفات الخصائص؟ تحتوي فئة الخصائص على طرق قراءة وكتابة خاصة لقراءة وكتابة ملفات سمات الخصائص، ولا داعي للقلق بشأن تنسيق القراءة والكتابة، ما عليك سوى توفير دفق القراءة والكتابة لفئة الخصائص. طرق الخصائص المستخدمة لقراءة وكتابة ملفات الخصائص هي:
انسخ رمز الكود كما يلي:
// طريقة قراءة دفق ملف السمة
تحميل الفراغ العام (InputStream inStream) يلقي IOException {}
// طريقة كتابة تدفق ملف السمة
مخزن باطل عام (OutputStream out، سلسلة التعليقات) يرمي IOException {}
أولاً، دعونا ننظر في كيفية قراءة الخصائص من ملف الخصائص.
لنفترض أننا أنشأنا ملف خصائص جديدًا باسمprop.properties بالمحتوى التالي:
انسخ رمز الكود كما يلي:
اسم الموقع = abcjava
siteurl=www.abcjava.com
الخطوة الأولى التي يتعين علينا القيام بها هي قراءة الملف في كائن فئة الخصائص. نظرًا لأن إحدى معلمات التحميل هي InputStream، فيمكننا استخدام FileInputStream من فئة InputStream الفرعية لقراءة ملف الخاصية في كائن الخصائص، ونحن نعرف المسار استخدم مُنشئ FileInputStream (اسم السلسلة):
انسخ رمز الكود كما يلي:
Propertiesprop = new Properties();// كائن مجموعة الخصائص
FileInputStream fis = new FileInputStream("prop.properties");// دفق ملف الخصائص
prop.load(fis);// قم بتحميل دفق ملف الخاصية إلى كائن الخصائص
بعد معرفة كيفية قراءة ملف الخصائص، لدينا شيء آخر مهم جدًا يجب القيام به، وهو تعديل وإضافة خصائص جديدة إلى ملف الخصائص. هنا نستخدم طريقة تخزين الفراغ العام (OutputStream out، String comments) التي تكتب هذه الطريقة مجموعة الخصائص إلى دفق OutputStream، تمامًا مثل دفق InputStream، يتم استخدام فئتها الفرعية FileOutputStream (اسم السلسلة) هنا أيضًا، لذلك لن أخوض في التفاصيل هنا.
قبل حفظ مجموعة الخصائص في الملف، علينا القيام بشيء آخر وهو كيفية تعديل وإضافة خصائص جديدة إلى مجموعة الخصائص. إحدى الطرق المستخدمة هنا هي setProperty(String key, String القيمة)، تهدف هذه الطريقة إلى تعديل قيمة المفتاح عندما يكون المفتاح المحدد موجودًا في مجموعة السمات، وإذا لم يكن موجودًا، فسيتم حفظه أيضًا من خلال العلاقة بين القيمة والمفتاح، ولكن من الجدير بالذكر التي ترثها فئة الخصائص منذ Hashtable، من الممكن أيضًا الحفظ باستخدام طريقتي put وputAll الخاصتين بـ Hashtable، ولكن لا يُنصح بشدة باستخدام هاتين الطريقتين لأنهما يسمحان للمتصل بإدراج عناصر ليست مفاتيحها أو قيمها سلاسل. بدلاً من ذلك، استخدم الأسلوب setProperty. إذا تم استدعاء أسلوب التخزين أو الحفظ على كائن خصائص "معرض للخطر" (أي يحتوي على مفتاح أو قيمة غير سلسلة)، فسوف يفشل الاستدعاء. حسنًا، دعونا نلقي نظرة على إجراءات تعديل السمات وإضافتها وحفظها:
انسخ رمز الكود كما يلي:
// تعديل قيمة سمة اسم الموقع
prop.setProperty("sitename", "Boxcode");
// أضف استوديو سمة جديد
prop.setProperty("studio", "Boxcode Studio");
// دفق إخراج الملف
FileOutputStream fos = new FileOutputStream("prop.properties");
// احفظ مجموعة الخصائص في الدفق
prop.store(fos, "حقوق الطبع والنشر (ج) Boxcode Studio");
fos.Close();// أغلق الدفق
التالي هو الكود المصدري للبرنامج بأكمله:
انسخ رمز الكود كما يلي:
استيراد java.io.FileInputStream؛
import java.io.FileOutputStream;
import java.util.Properties;
محرر خصائص الفئة العامة {
public static void main(String[] args) يطرح الاستثناء {
Propertiesprop = new Properties();
FileInputStream fis = new FileInputStream("prop.properties");// دفق إدخال ملف الخصائص
prop.load(fis);// قم بتحميل دفق ملف الخاصية إلى كائن الخصائص
fis. Close(); // أغلق الدفق
// احصل على قيمة السمة، تم تعريف اسم الموقع في الملف
System.out.println("الحصول على قيمة الخاصية: sitename=" +prop.getProperty("sitename"));
// احصل على قيمة السمة لم يتم تحديد البلد في الملف. سيتم إرجاع القيمة الافتراضية في هذا البرنامج، ولكن لن يتم تعديل ملف السمة.
System.out.println("الحصول على قيمة الخاصية: البلد =" +prop.getProperty("country", "China"));
// تعديل قيمة سمة اسم الموقع
prop.setProperty("sitename", "Boxcode");
// أضف استوديو سمة جديد
prop.setProperty("studio", "Boxcode Studio");
// دفق إخراج الملف
FileOutputStream fos = new FileOutputStream("prop.properties");
// احفظ مجموعة الخصائص في الدفق
prop.store(fos, "حقوق الطبع والنشر (ج) Boxcode Studio");
fos.Close();// أغلق الدفق
}
}