Torna indietro   Hardware Upgrade Forum > Software > Programmazione

OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
DJI Osmo Nano: la piccola fotocamera alla prova sul campo
DJI Osmo Nano: la piccola fotocamera alla prova sul campo
La nuova fotocamera compatta DJI spicca per l'abbinamento ideale tra le dimensioni ridotte e la qualità d'immagine. Può essere installata in punti di ripresa difficilmente utilizzabili con le tipiche action camera, grazie ad una struttura modulare con modulo ripresa e base con schermo che possono essere scollegati tra di loro. Un prodotto ideale per chi fa riprese sportive, da avere sempre tra le mani
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


OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Oracle AI World 2025: l'IA cambia tutto, a partire dai dati Oracle AI World 2025: l'IA cambia tutto, a parti...
Le immagini nell'occhio dell'uragano Mel...
Anche gli USA inseguono l'indipendenza: ...
TikTok: i content creator guadagneranno ...
Nothing Phone (3a) Lite disponibile, ma ...
Emissioni globali per la prima volta in ...
Bancomat lancia Eur-Bank: la stablecoin ...
NVIDIA supera i 5.000 miliardi di dollar...
I ransomware fanno meno paura: solo un'a...
Pixel 10a si mostra nei primi rendering:...
Intel Nova Lake-S: i dissipatori delle p...
1X Technologies apre i preordini per NEO...
Tesla Cybercab cambia rotta: nel taxi de...
L'industria dell'auto europea a pochi gi...
VMware tra cloud privato e nuovi modelli...
Amazon Haul lancia il colpo di genio: pr...
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: 02:08.


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