Cloud with rain
.:G
G:.
0 and 1 serie, black on white
pulled card
myjsp.feelinglinux.com
ver. 1.1.9-4
Hallo, welcome to my world.
Here you can find some stuff about computer science.
<<< Enjoy your visit! >>>
0 and 1 serie, white on black

Java - Esempio caricamento file di properties

        Scritto: Giansante Gabriele, 17/09/2002      Aggiornato: 29/01/2017     

Un file di "properties" e' un file contenente una serie di "proprieta'" (properties), ovvero coppie "chiave-valore" contenenti dati, messaggi, ecc.
Puo' avere due formati, ovvero semplice testo o XML:
Formato testo:

    # Commento A
    ! Commento B

    chiaveA=valoreA
    chiaveB:valoreB
    chiaveC valoreC
    ...
    chiaveD=valoreMultiLineaD_1 \
            valoreMultiLineaD_2 \
            ...
            valoreMultiLineaD_N
    chiaveE:valoreMultiLineaE_1 \
            valoreMultiLineaE_2 \
            ...
            valoreMultiLineaE_N
    chiaveF valoreMultiLineaF_1 \
            valoreMultiLineaF_2 \
            ...
            valoreMultiLineaF_N
    ...

Formato XML:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
        <comment>commento...</comment>
        <entry key="chiaveA">valoreA</entry>
        <entry key="chiaveB">valoreB</entry>
        <entry key="chiaveC">valoreC</entry>
    </properties>

I commenti nel formato testo sono preceduti da "#" o "!" (spazi e tabulazioni iniziali non contano).
Sempre nel formato testo, la coppia chiave-valore puo' essere separata da "=", da ":" o da uno spazio. Inoltre il valore puo' essere diviso su piu' linee (mediante "escape" con il carattere "\" del fine linea).

Un esempio (dati casuali):
Formato testo:

    #Un tipo di commento  
    !Un altro tipo di commento  

    # Proprieta' con chiave-valore separati da "="
    version=1.0.0
    name=MySoftware
    description=Questa e' una descrizione \
                un po' lunga, quindi la \
                divido su piu' linee
    menu.fontSize=14
    path=/home/myuser:/usr/local/etc

    # Proprieta' con chiave-valore separati da ":"
    system:linux

    # Proprieta' con chiave-valore separati da " "
    message.button.save Save
    message.button.exit Exit

Formato XML:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
        <comment>In formato XML...</comment>
        <entry key="version">1.0.0</entry>
        <entry key="name">MySoftware</entry>
        <entry key="description">Questa e' una descrizione un po' lunga, quindi la divido su piu' linee</entry>
        <entry key="menu.fontSize">14</entry>
        <entry key="path">/home/myuser:/usr/local/etc</entry>
        <entry key="system">linux</entry>
        <entry key="message.button.save">Save</entry>
        <entry key="message.button.exit">Exit</entry>
    </properties>


Possiamo in pratica metterci di tutto, dal testo a dati numerici oppure dati generici rappresentati in qualsiasi modo a noi conveniente.

Il caricamento o il salvataggio di tali file avviene mediante la classe
java.util.Properties
ed i suoi metodi
load(java.io.InputStream stream):void
store(java.io.OutputStream stream, String comment):void (Java <1.6)
load(java.io.Reader reader):void (Java 1.6 in poi)
store(java.io.Writer writer, String comment):void (Java 1.6 in poi)
loadFromXml(java.io.InputStream stream):void (Java 1.5 in poi)
storeToXml(java.io.OutputStream stream, String comment):void (Java 1.5 in poi)
storeToXml(java.io.OutputStream stream, String comment, String encoding):void (Java 1.5 in poi)
I metodi "load/store" con parametro in ingresso di tipo "InputStream/OutputStream" caricano/salvano con codifica "ISO 8859-1" (i caratteri speciali non all'interno del "Latin-1" devono essere specificati in unicode "\uXXXX", con XXXX opportuno valore esadecimale).
I metodi "loadFromXml/storeToXml" per default utilizzano l'encoding UTF-8.
Pubblicita'

Vediamo qualche esempio di come caricare un file di properties. Ogni esempio e' pensato per dare solo una base da cui partire e non per coprire ogni singolo aspetto come tutte le eccezioni generate, controlli vari, ecc.
Supponiamo di avere un file di properties il cui path e' "/data/example.properties".
Esempio 1

Valido per JDK 1.7 e successivi, utilizza il nuovo "try-with-resources" statement che consente di inizializzare una o piu' risorse ed utilizzarle senza doversi occupare della chiusura degli stream.

//L'estensione del file convenzionalmente e' "properties" 
//ma puo' essere una qualsiasi come "dat", "conf", "ini", ecc.
String filePath = "/data/example.properties";
Properties data = new Properties();
//Apertura stream
try (FileInputStream stream = new FileInputStream(new File(filePath))) {
   //Caricamento proprieta' (commentata la versione XML)
   //data.loadFromXml(stream);
    data.load(stream);
    ...
} catch (IOException e){
   //gestione eccezione...
}

L'esempio seguente e' valido per qualsiasi versione di Java ed usa il caricamento tramite "risorse".
Esempio 2

Caricamento come risorsa, valido per ogni versione di Java.
Il file viene caricato come risorsa, ovvero sara' cercato all'interno del percorso delle classi Java, seguendo la struttura dei package nel CLASSPATH.

//File all'interno del package "com.feelinglinux.examples"
String resourceFilePath = "/com/feelinglinux/examples/example.properties";
Properties data = new Properties();
try {
   //Stream associato al file di proprieta'
   InputStream stream = getClass().getResourceAsStream(resourceFilePath);
   //Caricamento proprieta' (commentata la versione XML)
   //data.loadFromXml(stream);
   data.load(stream);
   stream.close();
   ...
} catch (IOException e){
   //gestione eccezione...
}


L'esempio seguente e' valido per qualsiasi versione di Java ed usa il caricamento semplice da filesystem.
Esempio 3

Caricamento da filesystem, valido per ogni versione di Java.

//File all'interno del package "com.feelinglinux.examples"
String filePath = "/data/example.properties";
Properties data = new Properties();
try {
   //Stream associato al file di proprieta'
   FileInputStream stream = new FileInputStream(new File(path));
   //Caricamento proprieta' (commentata la versione XML)
   //data.loadFromXml(stream);
   data.load(stream);
   stream.close();
   ...
} catch (IOException e){
   //gestione eccezione...
}

Hai trovato utile questo articolo?
Aiutami a condividerlo o metti un "mi piace".
Grazie mille!


Gli strumenti di condivisione (Google+, Facebook) sono visibili in alto a destra solo dopo aver accettato la policy di utilizzo dei cookie per questo sito.
FAQ - Come faccio a cambiare la mia scelta?

 

Strumenti (myjsp.feelinglinux.com)
Gioco: allenamento con la tastiera Strumenti di codifica/decodifica URI (%-encoding) e Base64 Strumenti di calcolo online per IP e Reti
QUIZ GAME
Quiz game

Cerca @myjsp.feelinglinux.com

Pubblicita'