Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Nel Formula 1 Technology and Media Centre di Biggin Hill, la velocità delle monoposto si trasforma in dati, immagini e decisioni in tempo reale grazie all’infrastruttura Lenovo che gestisce centinaia di terabyte ogni weekend di gara e collega 820 milioni di spettatori nel mondo
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
Il nuovo gimbal mobile DJI evolve il concetto di tracciamento automatico con tre modalità diverse, un modulo multifunzionale con illuminazione integrata e controlli gestuali avanzati. Nel gimbal è anche presente un'asta telescopica da 215 mm con treppiede integrato, per un prodotto completo per content creator di ogni livello
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-11-2008, 10:54   #1
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
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?
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2008, 12:39   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
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)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2008, 12:47   #3
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
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>
Non riesco a capire come tirar fuori il valore localhost usando le librerie che ho importato.

C'è anche un esempio quì.
Ovvero:
Codice:
ConfigurationFactory factory = new ConfigurationFactory("config.xml");
Configuration config = factory.getConfiguration();
Però poi quando vado a fare:
Codice:
System.out.println(config.getString("configuration.server-host"))
Ottengo sempre NULL!!!

La cosa mi interessa parecchio, quindi opterei per questa soluzione.
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2008, 12:52   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da fbcyborg Guarda i messaggi
Dunque, vorrei usare il file xml in previsione di ulteriori estensioni e ora il file è molto semplice.
Nulla da ridire sulle tue scelte ma hai mai sentito parlare di YAGNI?
__________________

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)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2008, 12:56   #5
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
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");
effettivamente poi quando vado a fare
Codice:
System.out.println(config.getString("configuration.server-host"))
Ottengo localhost!

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!
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2008, 13:03   #6
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
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.
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2008, 13:30   #7
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
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.
__________________
^ThE CyBoRg^

Ultima modifica di fbcyborg : 06-11-2008 alle 14:43.
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2008, 15:23   #8
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
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.
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2008, 15:30   #9
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
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!
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2008, 15:47   #10
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da fbcyborg Guarda i messaggi
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!
basta usare questo nel metodo readProperties:
Codice:
properties.loadFromXML(Class.getResourceAsStream ("/some/pkg/configuration.xml"));
ovviamente mettendo al posto di some e di pkg il nome dei tuoi package in cui c'è il file di config
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2008, 16:06   #11
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
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"));
Poi do la possibilità all'utente di modificare quel valore, tramite un JButton.
Nell'actionPerformed del JButton faccio:
Codice:
properties.setProperty("server-host", host);
Dove host è la variabile di tipo String che contiene il nuovo valore.
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);
Il problema è che me lo cancella tutto e me lo riformatta come gli pare a lui, togliendo tutta la struttura del file xml, ovvero:
Codice:
#Thu Nov 06 16:06:22 GMT+01:00 2008
server-host=nuovoValore
Come faccio a dirgli che invece deve modificare solo il necessario andando a modificare solo il valore e non tutto il file?

EDIT: ho trovato l'errore. Dovevo usare storeToXML() anziché store().
__________________
^ThE CyBoRg^

Ultima modifica di fbcyborg : 06-11-2008 alle 16:38.
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2008, 12:24   #12
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
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?
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2008, 12:34   #13
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da fbcyborg Guarda i messaggi
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?
ehmm..
che intendi con "modificato via software"?
con cosa l'hai modificato?
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2008, 12:54   #14
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
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.
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2008, 13:14   #15
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da fbcyborg Guarda i messaggi
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.
boh..
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
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2008, 13:20   #16
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
Ok, ti ringrazio. Pazienza se non è possibile!
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Opera Neon: il browser AI agentico di nuova generazione Opera Neon: il browser AI agentico di nuova gene...
Snap e Perplexity unite: dal prossimo an...
La Cina dice addio a NVIDIA? Il governo ...
Microlino, simbolo italiano della mobili...
Apple disattiverà la sincronizzaz...
Google lancia l'allarme: attenzione ai m...
Primo test drive con Leapmotor B10: le c...
'Non può essere un robot': l'uman...
Monopattino elettrico Segway Ninebot Max...
Syberia Remastered è disponibile:...
Sony scopre che tutti i modelli AI hanno...
Amazon nasconde un -15% su 'Seconda Mano...
Due occasioni Apple su Amazon: iPhone 16...
Verso la fine della TV tradizionale? I g...
Cassa JBL a 39€, portatili, smartphone, ...
Cometa interstellare 3I/ATLAS: la sonda ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:20.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v