Home برمجة جافا حفظ إعدادت البرامج Storage Of Application Preferences
حفظ إعدادت البرامج Storage Of Application Preferences

حفظ إعدادت البرامج Storage Of Application Preferences

36
0

أي مستخدم User يفضل أن يحفظ البرنامج الذي يستخدمه الإعدادات والألوان وحجم الخطوط وأي Customization مباشره بعد أن يقوم تعديل خصائص البرنامج ، وبالتالي بمجرد تشغيل التطبيق مره أخرى يبدأ المستخدم في العمل بدلا من اعاده تجهيز تلك الإعدادات مره أخرى ..

كمبرمج اذا أردت أن تطبيق مثل هذه الخاصية بدون أستخدام أي أدوات مساعدة سوف تضطر الى كتابة تلك الإعدادات في ملف في مكان ما على القرص ، ومن ثم تقوم بقرائه هذه الإعدادات عند كل مره تشغيل للبرنامج وتطبيق هذه الإعدادات في البرنامج ، الطريقة واضحه ولكنها سوف تستهلك الزمن خصوصا عند الكتابة والقرائه حيث يجب أن تكون وفق نسق معين تعرفه حتى تستطيع القرائه Parsing بشكل صحيح .

في جافا وفرت صن عدة API لتسهيل المبرمجين على حفظ إعدادات البرنامج ابتدائا من الكلاس Properties والذي وجد في أوائل نسخ الجافا ، ولكن كما سنرى بعد قليل أن العمل مع هذا الكلاس غير مضمون تماما في جميع الحالات وفقط يفضل استخدام هذا الكلاس عند اراده حفظ معلومات بسيطة .

بعد ذلك قامت صن في جافا 1.4 بتقديم الكلاس Preference الذي يحل كل المشاكل تماما واستخدامه أسهل بكثير أيضا من الProperties .

في هذه المقالة سوف نتناول هذه الAPI الخاصه بحفظ اعدادات البرامج (سواء الProperties و الPreferences ) ، وفي الأخير سوف نطرح مثال عملي متكامل حول هذا الموضوع ..

Property Maps
الProperty هو map لتخزين مجموعه من المفاتيح وما يقابلها من القيم Key/Value Pairs . وجافا تطبق هذا المفهوم في الكلاس Properties وفي هذا الكلاس يجب أن تكون المفاتيح والقيم كلها من النوع String والذي يميزه عن استخدام الملفات العادية هو سهولة التخزين واسترجاع البيانات بسهوله ، اضافة الى أنك يمكن أن تقدم قيم افتراضية في حال لم تكن هناك قيم في الملف .

مثال :

وعند إراده تخزين هذه البيانات سوف نستخدم الدالة store والتي تستقبل FileStream حتى تكتب فيه البيانات والمعامل الأخر هو نص يُكتب في أول سطر في الملف ، كما المثال :

ومن المُفضل تخزين هذا الملف في مجلد المستخدم user home ، ويتم الإستعلام عن هذا المسار من خلال الدالة getProperty في الكلاس System :

وعند إراده القرائه من الملف ، سوف نستخدم الدالة load ويمرر لها FileStream يتم القرائه منه ، كما يلي :

لكن قد يحدث أن يتم التغيير في هذا الملف أو حتى حذفه ، لذلك يمكن أن نضع قيمه افتراضيه بحيث اذا لم يجد القيم في الملف يستخدم الإفتراضيه ، ويمكن ان نضع هذه القيم الإفتراضيه بطريقتين :

الأولى وهي من خلال استدعاء الدالة getProprty (في الكلاس Properties وليس System ) وتمرير المفتاح الذي نريد قيمته ويكون المعامل الأخر هو القيمه الإفتراضيه اذا لم يجد ذلك المفتاح :

الطريقة الثانيه وهي أسهل وأسرع خاصه اذا كانت هناك كثير من الإعدادات تحتاج لقرائتها ، وفيها تقوم بعمل Properties أخر يحتوي على القيم الإفتراضيه وتقوم بتمريرها لدالة بناء الProperties الذي يحتوي على الإعدادت ، وحين يتم قرائه القيمه الأولى سيتجاهل الإفتراضيه بالطبع ، وهكذا لكل المفاتيح ، كما يلي المثال :

المثال التالي لواجهه Swing تحفظ حجم الJFrame والإسم بعد أغلاق البرنامج ، ويعود الحجم عند فتحك للتطبيق مره أخرى :

The Preferences API
بالرغم من الكلاس Properties أدى المهمه على أكمل وجه ، الا أنه قد تحدث مشاكل في حال وجد ملف بنفس إسم الملف الذي ستحفظ فيه الإعدادات ، اضافة الى انه يدخلك في تفاصيل التخزين الى ملف والقرائه منه وكثير من المبرمجين الكسالى يريدون تجريد أكثر من ذلك وأنا أولهم ..

الكلاس Preferences أتي لحل هذه المشاكل ، فهو يقوم بحفظ الإعدادات في مكان ما على حسب البيئة التي يعمل عليها البرنامج ، فاذا عمل البرنامج تحت نظام ويندوز فسوف يخزن تلك الإعدادات في مسجل النظام Registry ، أما اذا عمل تحت لينوكس سوف يخزنها في مكان في نظام الملفات . ويمكن حفظ هذه الإعدادت للمستخدم الحالى User ، أما لأي مستخدم في النظام System . كما يبين المثال :

بعد ذلك يمكنك وضع الإعدادت في المكان الذي تريد ويفضل أن تكون كما في تقسيم الباكج ، المثال التالي يضعها في com/mycompany/myapp

اذا أردت أن تضع المسار كما في باكج الكلاس الحالي يمكنك أن تستخدم (فقط غير obj بthis ) :

لقرائه الإعدادت ، سوف تستخدم أحدى الدوال التالية ، وكلها تستقبل المفتاح والقيمه الإفتراضيه وترجع القيمه القيمه المناسبة (الإفتراضية اذا لم توجد قيمه للمفتاح والا القيمه الموجودة ) :

وللكتابة سوف تستخدم :

ويمكن اذا أردت أن تنقل البرنامج من بيئة لأخرى أن تقوم بعمل export للإعدادت في ملف xml ، وهناك قم بعمل import للإعدادات ، وذلك من خلال الدوال التالية:

Text-To-Speech Application :
قمت بعمل مثال بسيط ، لبرنامج لقرائه النصوص باستخدام المكتبة TTS ، أيضا استخدمت واجهات للبرنامج تسمى Substance ، وفي حال قام المستخدم بتغيير الواجهه أو تغيير صوت القارئ ومن ثم خرج من البرنامج فسوف تعود الإعدادات مره أخرى بعد فتح التطبيق .. أيضا اذا تمت الكتابة في JTextArea وتم الخروج من البرنامج فسوف ترجع ما كان موجود مرة أخرى عند فتح التطبيق ..

 

Prefer

لترجمه وتشغيل التطبيق ، حمل المكتبة Substance وضع الملف substance.jar في مسار البرنامج ، أيضا حمل المكتبة TTS وضع مجلد lib بالكامل في مسار البرنامج ، وأفضل أن تقوم بعمل ملف الباتش make.bat هذا للتسهيل وقم بتشغيله :

أما من يريد الكود + المكتبة للتجربة فقط فيمكنه تحميل هذا الملف ( 10 ميغا ):
Code + Library

وقم بتشغيل ملف الmake.bat ..

(36)

وجدي عصام مهندس برمجيات مهتم بعلوم الحاسب وبالأخص مجال الخوارزميات وهندسة البرمجيات وحماية التطبيقات،

LEAVE YOUR COMMENT

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

مشاركة