"Oggi esploriamo un altro argomento nuovo e interessante: le proprietà " .

"In Java, è consuetudine rendere i programmi flessibili e facilmente personalizzabili, cioè facilmente configurabili."

"Ad esempio, una volta all'ora il tuo programma copia i file da una determinata directory, li comprime e te li invia tramite e-mail. Per fare ciò, il programma deve conoscere la directory da cui verranno presi i file e l'indirizzo e-mail dove dovrebbero essere inviati. Tali dati sono solitamente memorizzati non nel codice dell'applicazione, ma in un file di proprietà separato ."

I dati in questo file vengono archiviati come coppie chiave-valore, separate da un segno di uguale.

Esempio
data.properties file
directory = c:/text/downloads
email = zapp@codegym.cc

"A sinistra del segno c'è il nome (chiave), a destra c'è il valore."

"Quindi questa è una specie di rappresentazione testuale di una HashMap?"

"In generale, sì."

"Per comodità nel lavorare con tali file, Java ha una speciale classe Properties. La classe Properties eredita Hashtable<Object,Object>. Può anche essere considerata come una Hashtable che può caricarsi da sola da un file."

"Ecco i suoi metodi:"

Metodo Descrizione
void load(Reader reader) Carica le proprietà dal file rappresentato da un oggetto Reader
void load(InputStream inStream) Carica le proprietà dal file rappresentato da un oggetto InputStream
void loadFromXML(InputStream in) Carica le proprietà da un file XML
Object get(Object key) Restituisce il valore per la chiave specificata. Questo metodo è ereditato da Hashtable
String getProperty(String key) Restituisce un valore di proprietà (stringa) per chiave.
String getProperty(String key, String defaultValue) Restituisce un valore di proprietà per chiave o defaultValue se non esiste tale chiave.
Set<String> stringPropertyNames() Restituisce un elenco di tutte le chiavi

"In altre parole, in realtà devi eseguire solo due operazioni: caricare i dati da un file in un oggetto Properties e quindi ottenere queste proprietà usando il metodo getProperty (). Bene, e non dimenticare che puoi usare l' oggetto Properties come una mappa hash ."

"Ecco un altro esempio:"

Codice
// The file that stores our project's properties
File file = new File("c:/data.properties");

// Create a Properties object and load data from the file into it.
Properties properties = new Properties();
properties.load(new FileReader(file));

// Get property values from the Properties object
String email = properties.getProperty("email");
String directory = properties.getProperty("directory");

// Get a numeric value from the Properties object
int maxFileSize = Integer.parseInt(properties.getProperty("max.size", "10000"));

"Ah. Quindi creiamo un oggetto Properties, e poi gli passiamo un file. Al metodo load. E poi chiamiamo semplicemente getProperty. Giusto?"

"Sì."

"E hai anche detto che può essere usato come HashMap? Cosa intendevi?"

"La classe Properties eredita Hashtable, che è uguale a HashMap, ma tutti i suoi metodi sono sincronizzati. Puoi semplicemente visualizzare tutti i valori dal file delle proprietà sullo schermo in questo modo:"

Codice
// Get the file with the properties
File file = new File("c:/data.properties");

// Create a Properties object and load data from the file into it.
Properties properties = new Properties();
properties.load(new FileReader(file));

// Run through all the keys and display their values on the console
for (String key : properties.stringPropertyNames())
{
 System.out.println(properties.get(key));
}

"Ah. Sembra che tutto sia andato a posto. Grazie, Rishi. Userò questa bella cosa."