תחילת העבודה עם מאפייני Java

1. סקירה כללית

רוב יישומי Java צריכים להשתמש במאפיינים בשלב כלשהו, ​​בדרך כלל כדי לאחסן פרמטרים פשוטים כצמדי ערך מפתח, מחוץ לקוד המהולל.

וכך יש לשפה תמיכה ממדרגה ראשונה בנכסים - java.util. נכסים - מחלקת כלי עזר המיועדת לטיפול בקבצי תצורה מסוג זה.

על זה נתמקד במאמר זה.

2. טעינת נכסים

2.1. מקבצי מאפיינים

נתחיל בדוגמא לטעינת צמדי ערך מפתח מקבצי מאפיינים; אנו טוענים שני קבצים שזמינים בדרכי הכיתה שלנו:

app.properties:

גרסה = 1.0 שם = תאריך TestApp = 12-11-2016

וגם קָטָלוֹג:

c1 = קבצים c2 = תמונות c3 = סרטונים

שימו לב שלמרות שקבצי המאפיינים מומלצים להשתמש “.נכסים", הסיומת, זה לא הכרחי.

כעת אנו יכולים לטעון אותם בפשטות רבה ל- נכסים למשל:

מחרוזת rootPath = Thread.currentThread (). GetContextClassLoader (). GetResource (""). GetPath (); מחרוזת appConfigPath = rootPath + "app.properties"; קטלוג מחרוזתConfigPath = rootPath + "קטלוג"; מאפיינים appProps = מאפיינים חדשים (); appProps.load (FileInputStream חדש (appConfigPath)); מאפייני catalogProps = מאפיינים חדשים (); catalogProps.load (FileInputStream חדש (catalogConfigPath)); מחרוזת appVersion = appProps.getProperty ("גרסה"); assertEquals ("1.0", appVersion); assertEquals ("קבצים", catalogProps.getProperty ("c1"));

כל עוד תוכן הקובץ עומד בדרישות תבנית הקובץ המאפיינים, ניתן לנתח אותו כהלכה על ידי נכסים מעמד. להלן פרטים נוספים על פורמט קובץ המאפיין.

2.2. טען מקבצי XML

מלבד קבצי מאפיינים, נכסים בכיתה יכולה גם לטעון קבצי XML התואמים למפרט ה- DTD הספציפי.

הנה דוגמה לטעינת צמדי ערכי מפתח מקובץ XML - icons.xml:

   דוגמה ל- xml icon1.jpg icon2.jpg icon3.jpg 

עכשיו, בואו נטען את זה:

מחרוזת rootPath = Thread.currentThread (). GetContextClassLoader (). GetResource (""). GetPath (); מחרוזת iconConfigPath = rootPath + "icons.xml"; מאפיינים iconProps = מאפיינים חדשים (); iconProps.loadFromXML (FileInputStream חדש (iconConfigPath)); assertEquals ("icon1.jpg", iconProps.getProperty ("fileIcon"));

3. השג נכסים

אנחנו יכולים להשתמש getProperty (מפתח מחרוזת) ו getProperty (מפתח מחרוזת, ערך מחרוזת default) כדי לקבל ערך לפי המפתח שלו.

אם צמד ערכי המפתח קיים, שתי השיטות יחזירו את הערך המתאים. אך אם אין צמד ערכי מפתח כזה, הראשון יחזיר אפס, והאחרון יחזור ערך ברירת מחדל במקום זאת.

קוד לדוגמא:

מחרוזת appVersion = appProps.getProperty ("גרסה"); מחרוזת appName = appProps.getProperty ("שם", "ברירת מחדל"); מחרוזת appGroup = appProps.getProperty ("קבוצה", "באלדונג"); מחרוזת appDownloadAddr = appProps.getProperty ("downloadAddr"); assertEquals ("1.0", appVersion); assertEquals ("TestApp", appName); assertEquals ("baeldung", appGroup); assertNull (appDownloadAddr);

שים לב שלמרות נכסים הכיתה יורשת לקבל() שיטה מ טבלת גיבוב בכיתה, לא הייתי ממליץ לך להשתמש בה כדי להשיג ערך. בגלל שלה לקבל() השיטה תחזיר לְהִתְנַגֵד ערך שאפשר להטיל אליו רק חוּט וה getProperty () השיטה כבר מטפלת בגולמי לְהִתְנַגֵד ערך נכון עבורך.

הקוד שלמטה יזרוק יוצא מן הכלל:

צף appVerFloat = (צף) appProps.get ("גרסה");

4. הגדר מאפיינים

אנחנו יכולים להשתמש setProperty () שיטה לעדכון צמד ערכי מפתח קיים או להוסיף זוג ערך מפתח חדש.

קוד לדוגמא:

appProps.setProperty ("שם", "NewAppName"); // עדכן appProps.setProperty בעל ערך ישן ("downloadAddr", "www.baeldung.com/downloads"); // הוסף צמד מפתח-מפתח חדש מחרוזת newAppName = appProps.getProperty ("שם"); assertEquals ("NewAppName", newAppName); מחרוזת newAppDownloadAddr = appProps.getProperty ("downloadAddr"); assertEquals ("www.baeldung.com/downloads", newAppDownloadAddr);

שים לב שלמרות נכסים הכיתה יורשת לָשִׂים() שיטה ו putAll () שיטה מ טבלת גיבוב בכיתה, לא הייתי ממליץ להשתמש בהם מאותה סיבה כמו לקבל() שיטה: בלבד חוּט ניתן להשתמש בערכים ב- נכסים.

הקוד שלמטה לא יעבוד כרצונך בעת השימוש getProperty () כדי לקבל את ערכו, הוא יחזור ריק:

appProps.put ("גרסה", 2);

5. הסר מאפיינים

אם ברצונך להסיר צמד ערכי מפתח, תוכל להשתמש לְהַסִיר() שיטה.

קוד לדוגמא:

מחרוזת versionBeforeRemoval = appProps.getProperty ("גרסה"); assertEquals ("1.0", versionBeforeRemoval); appProps.remove ("גרסה"); מחרוזת versionAfterRemoval = appProps.getProperty ("גרסה"); assertNull (versionAfterRemoval);

6. חנות

6.1. אחסן בקבצי מאפיינים

נכסים הכיתה מספקת א חנות() שיטה להפקת צמדי ערך מפתח.

קוד לדוגמא:

מחרוזת newAppConfigPropertiesFile = rootPath + "newApp.properties"; appProps.store (FileWriter חדש (newAppConfigPropertiesFile), "חנות לקובץ מאפיינים");

הפרמטר השני הוא להערה. אם אינך רוצה לכתוב תגובה כלשהי, פשוט השתמש ב- null לשם כך.

6.2. אחסן בקבצי XML

נכסים הכיתה מספקת גם storeToXML () שיטה להפקת זוגות של ערכי מפתח בפורמט XML.

קוד לדוגמא:

מחרוזת newAppConfigXmlFile = rootPath + "newApp.xml"; appProps.storeToXML (FileOutputStream חדש (newAppConfigXmlFile), "חנות לקובץ xml");

הפרמטר השני זהה לזה ב- חנות() שיטה.

7. פעולות נפוצות אחרות

נכסים class מספק גם כמה שיטות אחרות להפעלת המאפיינים.

קוד לדוגמא:

appProps.list (System.out); // רשום את כל זוגות ערך המפתח Enumeration valueEnumeration = appProps.elements (); בעוד (valueEnumeration.hasMoreElements ()) {System.out.println (valueEnumeration.nextElement ()); } Enumeration keyEnumeration = appProps.keys (); בעוד (keyEnumeration.hasMoreElements ()) {System.out.println (keyEnumeration.nextElement ()); } גודל int = appProps.size (); assertEquals (3, גודל);

8. רשימת נכסי ברירת מחדל

א נכסים אובייקט יכול להכיל אחר נכסים אובייקט כרשימת נכסי ברירת המחדל שלו. ברשימת ברירת המחדל של מאפיינים תחפש אם מפתח המאפיין לא נמצא במקור המקורי.

חוץ מזה "app.properties", יש לנו קובץ אחר -"default.properties”- על מסלול הכיתה שלנו:

default.properties:

אתר = www.google.com שם = DefaultAppName נושא = קטגוריית מאפיינים = core-java

קוד לדוגמא:

מחרוזת rootPath = Thread.currentThread (). GetContextClassLoader (). GetResource (""). GetPath (); מחרוזת defaultConfigPath = rootPath + "default.properties"; מאפייני defaultProps = מאפיינים חדשים (); defaultProps.load (FileInputStream חדש (defaultConfigPath)); מחרוזת appConfigPath = rootPath + "app.properties"; מאפיינים appProps = מאפיינים חדשים (defaultProps); appProps.load (FileInputStream חדש (appConfigPath)); assertEquals ("1.0", appVersion); assertEquals ("TestApp", appName); assertEquals ("www.google.com", defaultSite);

9. מאפיינים וקידוד

כברירת מחדל, קבצי מאפיינים צפויים להיות מקודדים ISO-8859-1 (Latin-1), ולכן בדרך כלל אין להשתמש במאפיינים עם תווים מחוץ ל- ISO-8859-1.

אנו יכולים לעקוף את המגבלה הזו בעזרת כלים כגון הכלי JDK native2ascii או קידודים מפורשים בקבצים, במידת הצורך.

עבור קבצי XML, ה- loadFromXML () שיטה ו storeToXML () בשיטה השתמש בקידוד תווים UTF-8 כברירת מחדל.

עם זאת, כאשר אנו קוראים קובץ XML המקודד אחרת, אנו יכולים לציין זאת ב- DOCTYPE הַצהָרָה; הכתיבה גם גמישה מספיק - אנו יכולים לציין את הקידוד בפרמטר שלישי של ה- storeToXML () ממשק API.

10. מסקנה

במאמר זה דנו בבסיסי נכסים שימוש בכיתה, כולל אופן השימוש נכסים לטעון ולאחסן זוגות של ערך מפתח בשני המאפיינים ובפורמט XML, כיצד להפעיל זוגות עם ערך מפתח ב- נכסים אובייקט, כגון אחזור ערכים, עדכון ערכים, קבלת גודלו וכיצד להשתמש ברשימת ברירת מחדל עבור a נכסים לְהִתְנַגֵד.

קוד המקור השלם לדוגמא זמין בפרויקט GitHub זה.