Properties

کلاس Properties زیر کلاس Hashtable است و برای نگه داری جداولی به کار می رود که در آن کلید و مقدار هر دو از نوع متنی هستند، مهم ویژگی این کلاس این است که به ما اجازه خواندن و نوشتن فایل های تنظیمات (configuration files) و دسترسی به تنظیمات سیستمی را می دهد. مهم ترین متد های این کلاس متد های load و store برای خواندن و نوشتن تنظیمات در فایل و loadFromXML و storeToXML برای خواندن و نوشتن در فایل تنظیمات XML هستند.این کلاس توسط بسیاری از کلاس های دیگر برای ارائه اطلاعات یا تغییر تنظیمات استفاده می شود.این کلاس از مسیر java.util.Properties قابل دستیابی است.برای ساخت یک شی از این کلاس باید از یکی از سازنده های زیر استفاده کنیم :

Properties()

یک جدول خالی ایجاد می کند.

Properties()

از روی یک Properties دیگر یک لیست اولیه ایجاد می کند. متد های مهم این کلاس در جدول زیر آمده اند:

متد کاربرد
getProperty(String key) کلید را دریافت کرده و مقدار متناظر با آن را در صورت وجود بر می گرداند.
getProperty(String key,String default) مانند متد قبلی است با این تفاوت که اگر مقدار مورد نظر پیدا نشد مقدار defaule را بر می گرداند.
list(PrintStream out) لیست را بر روی یک استریم خروجی می نویسد.
list(PrintWriter out) لیست را بر روی یک استریم خروجی می نویسد.
load(InputStream in) جدول را از روی یک استریم ورودی بارگذاری می کند.
load(Reader reader) جدول را از روی یک Reader میخواند.
loadFromXML(InputStream in) جدول را از روی یک جریان ورودی XML می خواند.
propertyNames() لیست کلید ها را به صورت یک Enumeration بر می گرداند.
setProperty(String key,String value) یک مقدار را به یک کلید خاص نسبت می دهد.
store(OutputStream out,String comments) عمل ذخیره سازی جدول را به همراه توضیحات انجام می دهد.
store(Writer writer,String comments) مانند متد قبلی عمل می کند با این تفاوت که بر روی یک Writer می نویسد.
storeToXML(OutputStream out,String comments) برای ذخیره جدول بر روی فایل XML همراه با توضیحات به کار می رود.
storeToXML(OutputStream out,String comments,String encoding) مانند متد قبل عمل می کند با این تفاوت که در اینجا قادر به تعیین encoding نیز هستیم.
stringPropertyNames() کلید ها را به صورت یک Set بر می گرداند.

چاپ اطلاعات سیستمی !

با استفاده از System.getProperties() می توانیم اطلاعات مفیدی را در مورد سیستمی که از آن استفاده می کنیم به دست بیاوریم ، کد زیر مسیر جاوا ، ساختار سیستم عامل ، مسیر home کاربر و نام سیستم عامل را چاپ می کند.

import java.util.Properties;

public class PropertiesDemo
{
    public static void main(String[] args)
    {
        Properties myProperty = System.getProperties();

        System.out.println(myProperty.get("java.home"));
        System.out.println(myProperty.get("os.arch"));
        System.out.println(myProperty.get("user.home"));
        System.out.println(myProperty.get("os.name"));
    }
}

ذخیره در فایل

در این مثال یاد میگیریم که چگونه یه فایل Properties (یا به عبارتی فایل تنظیمات) را در یک فایل ذخیره کنیم :

import java.io.*;
import java.util.Properties;

public class XPathDemo
{
    public static void main(String[] args) throws Exception
    {
        FileOutputStream fileoutputstream = new FileOutputStream("D:/Sample.config");
        Properties myProperty = new Properties();

        myProperty.setProperty("username","root");
        myProperty.setProperty("password","123456");
        myProperty.setProperty("database","localhost");
		
        myProperty.store(fileoutputstream,"Database Config!");		
    }
}

در کد بالا یک Properties خالی ایجاد می کنیم و سپس با استفاده از متد setProperty داده هایی را در آن می نویسیم و در آخربه سادگی با استفاده از متد store آن را در فایل می نویسیم.اگر فایل مورد نظر را باز کنید به صورت زیر خواهد بود :

#Database Config!
#Mon May 01 08:04:02 IRDT 2017
password=123456
database=localhost
username=root

البته در فایل مورد نظر تاریخ نیز درج می شود که در این مثال آن را حذف کردیم.

خواندن از فایل

در مثال قبل یک Properties را در فایل نوشتیم ، در این مثال قصد داریم همان فایل را بخوانیم و در خروجی چاپ کنیم.

import java.util.Properties;

public class PropertiesDemo
{
    public static void main(String[] args) throws Exception
    {
        FileInputStream fileinputstream = new FileInputStream("D:/Sample.config");
        Properties myProperty = new Properties();

        myProperty.load(fileinputstream);
		
        System.out.println("username :" +myProperty.getProperty("username"));
        System.out.println("password :" +myProperty.getProperty("password"));
        System.out.println("database :" +myProperty.getProperty("database"));		
    }
}
username :root
password :123456
database :localhost

همانطور که مشاهده می کنید به سادگی با استفاده از متد load محتوای فایل را در یک Properties خواندیم و مقادیر مورد نظر را به سادگی چاپ کردیم.

ذخیره در فایل XML

کد زیر همان Properties مثال قبل را در یک فایل XML ذخیره می کند :

import java.io.FileOutputStream;
import java.util.Properties;

public class PropertiesDemo
{
    public static void main(String[] args) throws Exception
    {
        FileOutputStream fileoutputstream = new FileOutputStream("D:/Sample.xml");
        Properties myProperty = new Properties();

        myProperty.setProperty("username","root");
        myProperty.setProperty("password","123456");
        myProperty.setProperty("database","localhost");
		
        myProperty.storeToXML(fileoutputstream,"Database Config!!");		
    }
}

مشاهده می کنید که با استفاده از متد storeToXML به سادگی قادر به نوشتن تنظیمات در فایل xml هستیم ، اگر فایل xml مورد نظر را باز کنید مشاهده می کنید که محتوای آن به صورت زیر است :

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Database Config!!</comment>
<entry key="password">123456</entry>
<entry key="database">localhost</entry>
<entry key="username">root</entry>
</properties>

خواندن از فایل XML

در این مثال از فایل XML قبلی خوانده و نتایج را در خروجی چاپ می کنیم.

import java.io.FileInputStream;
import java.util.Properties;

public class PropertiesDemo
{
    public static void main(String[] args) throws Exception
    {
        FileInputStream fileinputstream = new FileInputStream("D:/Sample.xml");
        Properties myProperty = new Properties();

        myProperty.loadFromXML(fileinputstream);
		
        System.out.println("username :" + myProperty.getProperty("username"));
        System.out.println("password :" + myProperty.getProperty("password"));
        System.out.println("database :" + myProperty.getProperty("database"));		
    }
}
username :root
password :123456
database :localhost

همانطور که مشاهده می کنید با استفاده از متد loadFromXML به سادگی قادر به خواندن از فایل xml هستیم.