|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
[JAVA] Usare un file di configurazione stile Unix/Linux per le nostre applicazioni
Salve a tutti,
nella mia applicazione mi sono trovato ad aver bisogno di un file di configurazione, che sia accessibile in lettura/scrittura sia dalla mia interfaccia grafica, sia ovviamente editandolo con un editor di testi. Dal momento che è la prima volta che mi capita una cosa del genere vorrei chiedervi un consiglio: uso un normalissimo file di configurazione come si fa su Linux o XML? Nel primo caso, dovrei scrivermi una buona parte di codice che interpreti se la riga è un commento o no; dovrebbe prendere ogni singola riga e fare il parsing delle stringhe, del tipo NOME_PARAMETRO="valore", catturando solo il valore in corrispondenza di un dato parametro richiesto ecc.. Siccome ho visto che questa cosa è abbastanza elaborata ho pensato a XML che mi sembra più indicato per questo genere di cose. Facendo qualche ricerca ho trovato questo. Non so però, se è esattamente quello che sto cercando. Qualcuno può illuminarmi? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Se il tuo file di configurazione non è troppo articolato penso possa bastare un semplice file di testo senza scomodare XML e librerie varie per parserizzarlo.
Magari se fai un esempio del file di config si può capire meglio se ti serva proprio XML o se invece sia più semplice gestire tutto con un file di testo. Considera che se devi solo riconoscere una riga commentata da una valida, e quella valida è sempre e solo strutturata come una coppia "Nome Parametro", "Valore" imho ti basta il file di testo da parserizzare da te. In Java c'è la classe Scanner che potrebbe tornarti utile.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Dunque, vorrei usare il file xml in previsione di ulteriori estensioni e ora il file è molto semplice.
Codice:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <server-host>localhost</server-host> </configuration> C'è anche un esempio quì. Ovvero: Codice:
ConfigurationFactory factory = new ConfigurationFactory("config.xml");
Configuration config = factory.getConfiguration();
Codice:
System.out.println(config.getString("configuration.server-host"))
La cosa mi interessa parecchio, quindi opterei per questa soluzione. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Si conosco bene questa filosofia, grazie.
Ora però sto cercando di capire come usare questo Configuration di org.apache. Ho notato che facendo un Codice:
config.setProperty("configuration.server-host", "localhost");
Codice:
System.out.println(config.getString("configuration.server-host"))
Quindi in un certo senso funziona. Solo non capisco perché effettivamente il file non viene usato! E' come se usasse un file XML in memoria, e non usasse il vero file xml che ho messo nella root del progetto. Però di fatto lo vuole in input come ho scritto prima! |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
è inutile complicarti la vita in quel modo.
usa questo: http://java.sun.com/javase/6/docs/ap...roperties.html Volendo puoi anche scrivere le properties direttamente in XML con i metodi loadFromXML(InputStream) e storeToXML(OutputStream, String, String), ma io ti consiglio il normale file di testo.
__________________
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Grazie!
Porca miseria! E pensare che la classe Properties l'avevo già usata in un corso universitario per gli EJB. Ora vedo che cosa si può fare. EDIT: ho risolto prendendo spunto da questo esempio. Spero possa essere utile anche ad altri. Grazie a tutti ancora. Ultima modifica di fbcyborg : 06-11-2008 alle 14:43. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
è meglio non usare il FileInputStream per accedere alle properties ma il resourcebundle o il getResourceAsStream come in questo esempio:
http://www.javaworld.com/javaworld/j...ty.html?page=2 In questo modo non si è vincolati al filesystem, ma si utilizza direttamente il classloader della VM.
__________________
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Mi sembra un po' complicato l'esempio in fondo alla pagina.
Gentilmente, potresti mostrarmi come faresti tu, adattando il codice che ho linkato io, con quello che hai detto tu? Grazie! |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
Codice:
properties.loadFromXML(Class.getResourceAsStream ("/some/pkg/configuration.xml"));
__________________
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Guarda, c'ho provato ma non funziona.
Da sempre problemi sul fatto che non posso chiamare un metodo statico in un contesto non statico o viceversa, ora non ricordo bene. So bene che quanto lamenta il compilatore è corretto! Ci mancherebbe. Solo che evidentemente non riesco a rimettere bene le cose a posto nel mio contesto. Ora il problema è un altro. Quello che mi serve di fare è, caricare una certa proprietà in base alla chiave, mostrarla in una JLabel e dare la possibilità di modificare il valore in questione nel file di configurazione xml. Fino a quì ci sono... Prelevo il valore in base alla chiave con: Codice:
jLabel4.setText(properties.getProperty("server-host"));
Nell'actionPerformed del JButton faccio: Codice:
properties.setProperty("server-host", host);
Successivamente, dovrò aggiornare il mio file config.xml e quindi ho pensato "bene" di dare la seguente istruzione: Codice:
properties.store(new FileOutputStream("config.xml"), null);
Codice:
#Thu Nov 06 16:06:22 GMT+01:00 2008 server-host=nuovoValore EDIT: ho trovato l'errore. Dovevo usare storeToXML() anziché store(). Ultima modifica di fbcyborg : 06-11-2008 alle 16:38. |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
E' normale che il mio file xml, dopo esser stato modificato via software, perda l'indentazione?
In caso, com'è possibile fare in modo che non la perda? |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
che intendi con "modificato via software"? ![]() con cosa l'hai modificato?
__________________
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Intendo quando faccio un setProperty e uno store tramite un oggetto Properties.
In questo modo vado a modificare un determinato valore in base alla chiave passata e poi applico le modifiche su file con lo store(). Proprio come ho detto un paio di post fa. Inizialmente il mio file xml era ben indentato. Una volta che ho dato lo "store" ha perso l'indentazione. NB: questo non mi crea problemi di funzionalità, anzi.. tutt'altro. Mi interessava solo per migliorare la leggibilità qualora ce ne fosse la necessità di modificare tale file a mano. |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
non mi pare che lo storeToXml permetta di specificare se mantenere l'indentazione come fanno i parser... Al limite potresti leggere il file con un parser decente e riscriverlo con la formattazione corretta. Però, secondo me, la scelta migliore in questo caso è fare uno store su un file .properties di testo e memorizzare le informazioni come coppia chiave valore che è il metodo in assoluto + leggibile
__________________
|
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Ok, ti ringrazio. Pazienza se non è possibile!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:08.






















