Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Nelle ultime settimane abbiamo provato la Corsair Vanguard Air 99 Wireless, una tastiera tecnicamente da gaming, ma che in realtà offre un ampio ventaglio di possibilità anche al di fuori delle sessioni di gioco. Flessibilità e funzionalità sono le parole d'ordine di una periferica che si rivolge a chi cerca un prodotto capace di adattarsi a ogni esigenza e ogni piattaforma
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
DEEBOT T90 PRO OMNI abbina un sistema di aspirazione basato su tecnologia BLAST ad un rullo di lavaggio dei pavimenti dalla larghezza elevata, capace di trattare al meglio le superfici di casa minimizzando i tempi di lavoro. Un robot completo che riesce anche ad essere sottile e garantire automazione ed efficienza nelle operazioni di pulizia di casa
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-09-2008, 18:49   #1
odiojava.net
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 8
[Java] Ordinamento di un file XML tramite Jdom

Salve!
Stò avendo problemi nel fare l'ordinamento di un file xml usando le librerie jdom.
Questo è il codice che ho scritto:

Codice PHP:
int selezione 0;
    
String locazione casellasfoglia.getText();
    
impegno ciccio = new impegno (locazione,selezione);
    
int alto ciccio.getnumele(locazione);
    
Element agenda = new Element("agenda"); 
    
Element appuntamento = new Element("appuntamento");
    
Element gdescrizione = new Element ("descrizione");
    
Element nome = new Element("nome");
    
Element cognome = new Element("cognome");
    
Element gdata = new Element("data");
    
Element gora = new Element ("ora");
    
Element gpriorita = new Element ("priorita");
    for (
int i=0;i<ciccio.getnumele(locazione);i++){
    
ciccio = new impegno (locazione,i);
    
gdescrizione = new Element ("descrizione"); gdescrizione.setText(ciccio.getdescrizione());
    
nome = new Element("nome"); nome.setText(ciccio.getnome());
    
cognome = new Element("cognome"); cognome.setText(ciccio.getcognome());
    
gdata = new Element("data"); gdata.setText(ciccio.getdatastring());
    
gora = new Element ("ora"); gora.setText(ciccio.getora());
    
gpriorita = new Element ("priorita"); gpriorita.setText(ciccio.getpriorita());
    
appuntamento = new Element("appuntamento");
    
appuntamento.addContent(gdescrizione); 
    
appuntamento.addContent(nome);
    
appuntamento.addContent(cognome);
    
appuntamento.addContent(gdata);
    
appuntamento.addContent(gora);
    
appuntamento.addContent(gpriorita);
    
agenda.addContent(appuntamento);
    }
    
Element agenda2 agenda;
    List 
backup agenda.getChildren("appuntamento");
    List 
backup2 agenda2.getChildren("appuntamento");
    
Iterator pointer backup.iterator();
    
Iterator pointer2 backup2.iterator();
    
String descrizionetmp = new String();
    
String nometmp = new String();
    
String cognometmp = new String();
    
String datatmp = new String();
    
String oratmp = new String();
    
String prioritatmp = new String();
    
int giorno1 0;
    
int mese1 0;
    
int anno1 0;
    
GregorianCalendar data1 = new GregorianCalendar();
    
int giorno2 0;
    
int mese2 0;
    
int anno2 0;
    
GregorianCalendar data2 = new GregorianCalendar();

    while (
alto 0)
    {
        
pointer backup.iterator();
        
pointer2 backup2.iterator();
        
agenda2 = (Elementpointer2.next();
        for (
int c=0;c<alto-1;c++)
        {
            
agenda = (Elementpointer.next();
            
agenda2 = (Elementpointer2.next();
            
giorno1 Integer.parseInt(agenda.getChild("data").getTextTrim().substring(0,2));
            
mese1 Integer.parseInt(agenda.getChild("data").getTextTrim().substring(3,5));
            
anno1 Integer.parseInt(agenda.getChild("data").getTextTrim().substring(6,10));
            
data1 = new GregorianCalendar(anno1,(mese1-1),giorno1);
            
giorno2 Integer.parseInt(agenda2.getChild("data").getTextTrim().substring(0,2));
            
mese2 Integer.parseInt(agenda2.getChild("data").getTextTrim().substring(3,5));
            
anno2 Integer.parseInt(agenda2.getChild("data").getTextTrim().substring(6,10));
            
data2 = new GregorianCalendar(anno2,(mese2-1),giorno2);
            
System.out.println("C: " ", nome agenda1 :" agenda.getChild("nome").getTextTrim()+ ", nome agenda2 :" agenda2.getChild("nome").getTextTrim() + ", data1 :" 
                    
data1.get(GregorianCalendar.DAY_OF_MONTH) + "/" +
                (
data1.get(GregorianCalendar.MONTH)+1) + "/" 
                
data1.get(GregorianCalendar.YEAR) + ", data2 :" 
                
data2.get(GregorianCalendar.DAY_OF_MONTH) + "/" +
                (
data2.get(GregorianCalendar.MONTH)+1) + "/" 
                
data2.get(GregorianCalendar.YEAR));
            if (
data1.after(data2)==true)
            {
//                //temp <- agenda
    
System.out.println("Scambio effettuato tra " agenda.getChild("nome").getTextTrim() + " e " agenda2.getChild("nome").getTextTrim());
    
descrizionetmp agenda.getChild("descrizione").getTextTrim();
    
nometmp agenda.getChild("nome").getTextTrim();
    
cognometmp agenda.getChild("cognome").getTextTrim();
    
datatmp agenda.getChild("data").getTextTrim();
    
oratmp agenda.getChild("ora").getTextTrim();
    
prioritatmp agenda.getChild("priorita").getTextTrim();
    
//agenda <-- agenda2
    
agenda.getChild("descrizione").setText(agenda2.getChild("descrizione").getTextTrim());
    
agenda.getChild("nome").setText(agenda2.getChild("nome").getTextTrim());
    
agenda.getChild("cognome").setText(agenda2.getChild("cognome").getTextTrim());
    
agenda.getChild("data").setText(agenda2.getChild("data").getTextTrim());
    
agenda.getChild("ora").setText(agenda2.getChild("ora").getTextTrim());
    
agenda.getChild("priorita").setText(agenda2.getChild("priorita").getTextTrim());
    
//agenda2 <-- tmp
    
agenda2.getChild("descrizione").setText(descrizionetmp);
    
agenda2.getChild("nome").setText(nometmp);
    
agenda2.getChild("cognome").setText(cognometmp);
    
agenda2.getChild("data").setText(datatmp);
    
agenda2.getChild("ora").setText(oratmp);
    
agenda2.getChild("priorita").setText(prioritatmp);
            }
        }
        
alto--;
    }
    
pointer backup.iterator();
    
pointer2 backup2.iterator();
    
XMLOutputter xmlOut = new XMLOutputter(); 
    
xmlOut.setFormat(Format.getPrettyFormat()); 
    
FileOutputStream output
        try {
            
output = new FileOutputStream(new File(locazione));
            
xmlOut.output(new Document(agenda),output);
        } catch (
IOException erIO) {
        
System.out.println("IO Exception");
    } 
Ok magari a primo impatto sembra molto incasinato come codice.. ed in effetti lo è :P
Bisogna focalizzarsi principalmente sulla parte dell'ordinamento (fatto tramite Bubble sort), quando inizia il ciclo While per intenderci.
Il codice viene compilato (stranamente) senza problemi ma quando vado in esecuzione ho quest'errore:
Exception in thread "AWT-EventQueue-0" org.jdom.IllegalAddException: The Content already has an existing parent "agenda"
Quell'errore non mi è nuovo, l'ho già visto quando usavo il "agenda.addcontent" a sproposito.. ma stavolta pare sia diverso.
Il problema infatti avviene al momento della scrittura del file, dopo aver ordinato il tutto.
Commentando il codice di scrittura infatti non ci sono problemi di sorta.
Ho provato anche a commentare la fase dello "scambio", ma il problema resta sempre lo stesso.
Se commento tutto l'ordinamento non ci sono problemi.
Insomma.. in teoria il problema è in quello che viene eseguito dentro il for ma non dentro l'if (c'è un solo for quindi non è difficile capire a quel mi riferisco :P ) ma non riesco proprio a capire cosa diavolo può essere.

ps: stò scrivendo il tutto con netbeans e dopo aver fatto una GUI, quindi c'è un riferimento ad una casella, per l'appunto "casellasfoglia"

Grazie, mi ci stò ammattendo :P
odiojava.net è offline   Rispondi citando il messaggio o parte di esso
Old 24-09-2008, 21:02   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Una delle caratteristiche interessanti di JDOM è che una lista di nodi non è rappresentata da classi specifiche e poco maneggevoli come NodeList per il DOM ma è gestita come una collezione java.util.List. E quindi è molto più pratica, intuitiva e maneggevole.

Con questo voglio dire che se devi solo scambiare 2 nodi nella lista, basta semplicemente scambiare i due oggetti nella lista, non scambiare tutti i nodi di testo contenuti nei nodi figli!!!!

E non ti conviene nemmeno usare gli iteratori ... basterebbe sfruttare size() ed agire a livello di indici.

E visto che la data è in un formato ben preciso e la usi diverse volte, ti conviene pure fare un metodo che converte la stringa in un Calendar o Date.

Insomma ... con un po' di accortezza il codice verrebbe molto più pulito e almeno la metà in meno di quello che hai scritto.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 24-09-2008, 21:24   #3
odiojava.net
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 8
Grazie mille per la risposta
Ecco, il problema è che non sono proprio un esperto di programmazione (ormai s'era capito) quindi anche volendo fare certe cose non saprei come farle :P
Per invertire i 2 nodi l'idea iniziale era appunto di scambiarli tra di loro.. ma viste le difficoltà tecniche ho dovuto abbandonare e fare quest'altro metodo stupido, ma funzionante.
Per questo vista la tua cortesia mi piacerebbe farti un paio di domande
- Come faccio a sostituire solo il nodo?
- Come faccio a "selezionare" l'elemento successivo senza l'uso di un iteratore?

Grazie mille ancora
odiojava.net è offline   Rispondi citando il messaggio o parte di esso
Old 24-09-2008, 21:44   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da odiojava.net Guarda i messaggi
- Come faccio a sostituire solo il nodo?
- Come faccio a "selezionare" l'elemento successivo senza l'uso di un iteratore?
List ha get() e set() a cui si passa l'indice, quindi basterebbe usare questi due metodi.
Nota che si può sfruttare una cosa interessante di set() e cioè che ritorna l'elemento precedente!!! E questo permetterebbe di usare solo 1 get e 2 set e sopratutto senza usare variabili temporanee.

Tecnica che è stata utilizzata da un metodo di java.util.Collections che è:
public static void swap(List list, int i, int j)
(solo da Java 1.4 in poi)
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2008, 02:15   #5
odiojava.net
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 8
Quote:
Originariamente inviato da andbin Guarda i messaggi
List ha get() e set() a cui si passa l'indice, quindi basterebbe usare questi due metodi.
Nota che si può sfruttare una cosa interessante di set() e cioè che ritorna l'elemento precedente!!! E questo permetterebbe di usare solo 1 get e 2 set e sopratutto senza usare variabili temporanee.

Tecnica che è stata utilizzata da un metodo di java.util.Collections che è:
public static void swap(List list, int i, int j)
(solo da Java 1.4 in poi)
Ti ringrazio ancora una volta per la risposta
Il metodo dei get() e set() è interessante, ma non riesco ad applicarlo al mio caso.
Allora, il file xml che stò costruendo è strutturato così:

<agenda>
<appuntamento>
<descrizione>compleanno</descrizione>
<nome>pino</nome>
<cognome>barba</cognome>
<data>01/12/2008</data>
<ora>00:00</ora>
<priorita>Trascurabile</priorita>
</appuntamento>
</agenda>

Io ho dichiarato come Element agenda, appuntamento e tutto il resto, dopodichè ho caricato dentro appuntamento i 6 campi (descrizione, nome etc) e l'ho fatto finchè non finivo di leggere dal file xml. Ogni volta che finivo a leggere quei 6 campi aggiungevo appuntamento ad agenda.
Infine creo una lista chiamata "backup" nella quale colloco i vari appuntamenti appena caricati nell'agenda tramite la stringa:
List backup = agenda.getChildren("appuntamento");
E fin qui tutto ok.
Ora a me serve "ricacciare" da questo Element chiamato agenda la data del primo elemento, per confrontarla con quella del secondo e nel caso sostituirla.
Se faccio backup.get(1) mi restituisce "[Element: <appuntamento/>]", ovviamente ho lo stesso output anche con backup.get(2).
Andando un po' a logica ho provato a fare backup.get(1).getChildren("data") ma getChildren non compare tra i metodi disponibili (backup alla fine è cosa ben diversa da agenda quindi l'errore è motivato).

Come faccio quindi a ricacciarmi la data?
Una volta sorpassato questo scoglio penso di poter fare il resto

Grazie ancora
odiojava.net è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2008, 09:25   #6
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Codice:
List appuntamenti = agenda.getChildren("appuntamento");
int size = appuntamenti.size();

for (int i = 0; i < size-1; i++) {
    for (int j = i+1; j < size; j++) {
        Element appuntamento1 = (Element) appuntamenti.get(i);
        Element appuntamento2 = (Element) appuntamenti.get(j);

        Calendar calendar1 = metodoPerParsingData(appuntamento1.getChildTextTrim("data"));
        Calendar calendar2 = metodoPerParsingData(appuntamento2.getChildTextTrim("data"));

        if (calendar1.after(calendar2)) {
            appuntamenti.set(i, appuntamento2);
            appuntamenti.set(j, appuntamento1);
        }
    }
}
Dove metodoPerParsingData è un metodo che dovresti fare (meglio un altro nome ... es. parseData), magari statico, che dato un String crea e ritorna un Calendar (GregorianCalendar) facendo il parsing della stringa (come hai fatto).

Tutto qui .... quante righe sono??? Poche e ... pulite e chiare. Nota lo swap dei due elementi ... basta settare gli Element scambiando gli indici.

P.S. il codice non l'ho provato, ovviamente. Ma in linea di massima dovrebbe essere ok.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)

Ultima modifica di andbin : 25-09-2008 alle 10:07.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2008, 10:14   #7
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Prendo spunto dal tuo codice Andbin, per modificarlo di pochissimo in modo da renderlo un'implementazione dell'ordinamento Bubblesort, con l'aggiunta di un flag per interrompere l'algoritmo non appena la lista è ordinata (ovvero quando non ci sono più scambi in un'intera iterazione).

Codice:
List appuntamenti = agenda.getChildren("appuntamento");
int size = appuntamenti.size();
boolean flag = false;

while (size > 0)
{
    if (flag)
    {
        break;
    }
    
    for (int i = 0; i < size-1; i++)
    {
        flag = true;
        
        Element appuntamento1 = (Element) appuntamenti.get(i);
        Element appuntamento2 = (Element) appuntamenti.get(i+1);

        Calendar calendar1 = metodoPerParsingData(appuntamento1.getChildTextTrim("data"));
        Calendar calendar2 = metodoPerParsingData(appuntamento2.getChildTextTrim("data"));

        if (calendar1.after(calendar2)) 
        {
            appuntamenti.set(i, appuntamento2);
            appuntamenti.set(i+1, appuntamento1);
            flag = false;
        }       
    }
    size--;
}
Non l'ho provato, spero di non aver commesso errori.
__________________

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)

Ultima modifica di banryu79 : 25-09-2008 alle 10:21.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2008, 13:25   #8
odiojava.net
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 8
Purtroppo non funziona, c'è lo stesso errore che avevo io

Ecco il codice che ho messo:

Codice PHP:
List backup agenda.getChildren("appuntamento");
    
int giorno1 0;
    
int mese1 0;
    
int anno1 0;
    
GregorianCalendar data1 = new GregorianCalendar();
    
int giorno2 0;
    
int mese2 0;
    
int anno2 0;
    
GregorianCalendar data2 = new GregorianCalendar();
    
int size backup.size();
    
Element appuntamento1;
    
Element appuntamento2;
for (
int i 0size-1i++) {
    for (
int j i+1sizej++) {
        
appuntamento1 = (Elementbackup.get(i);
        
appuntamento2 = (Elementbackup.get(j);
            
giorno1 Integer.parseInt(appuntamento1.getChildTextTrim("data").substring(0,2));
            
mese1 Integer.parseInt(appuntamento1.getChildTextTrim("data").substring(3,5));
            
anno1 Integer.parseInt(appuntamento1.getChildTextTrim("data").substring(6,10));
            
data1 = new GregorianCalendar(anno1,(mese1-1),giorno1);
            
giorno2 Integer.parseInt(appuntamento2.getChildTextTrim("data").substring(0,2));
            
mese2 Integer.parseInt(appuntamento2.getChildTextTrim("data").substring(3,5));
            
anno2 Integer.parseInt(appuntamento2.getChildTextTrim("data").substring(6,10));
            
data2 = new GregorianCalendar(anno2,(mese2-1),giorno2);
        if (
data1.after(data2)) {
            
backup.set(iappuntamento2);
            
backup.set(jappuntamento1);
        }
    }

Al momento della compilazione dice:
Note: C:\Users\<mionome>\Documents\NetBeansProjects\Rubrica\src\calendario.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

Però il programma parte ugualmente.
Quando provo a fare l'ordinamento esce lo stesso errore di prima, ovvero:

Exception in thread "AWT-EventQueue-0" org.jdom.IllegalAddException: The Content already has an existing parent "agenda"

Bloccandosi li.. non arriva neanche alla fase di scrittura dell'output

edit: facendo 2 prove ho trovato cosa dà l'errore:
backup.set(i, appuntamento2);
backup.set(j, appuntamento1);
Per trovarlo ho messo vari "System.out" in giro per il codice e si blocca sempre dopo aver eseguito quello prima di queste 2 istruzioni

Ultima modifica di odiojava.net : 25-09-2008 alle 13:36.
odiojava.net è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2008, 14:54   #9
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da odiojava.net Guarda i messaggi
Al momento della compilazione dice:
Note: C:\Users\<mionome>\Documents\NetBeansProjects\Rubrica\src\calendario.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Questo perché stai usando almeno un JDK 5 o superiore e stai usando List non parametrizzato (JDOM non usa i "generics").
Il warning si potrebbe sopprimere ma comunque non te ne curare più di tanto (anche perché tra poco vedrai come risolvere senza fare dei set() su List).

Quote:
Originariamente inviato da odiojava.net Guarda i messaggi
Quando provo a fare l'ordinamento esce lo stesso errore di prima, ovvero:

Exception in thread "AWT-EventQueue-0" org.jdom.IllegalAddException: The Content already has an existing parent "agenda"
Già .... ma il motivo lo si spiega subito. Premetto che non sono espertissimo della libreria JDOM (conosco giusto le caratteristiche a livello generale ed ho fatto qualche prova in passato).
Quando si setta o si aggiunge un elemento nella List fornita da JDOM, controlla che l'elemento non abbia già un parente. Ho anche provato a fare un detach() sul Element ma sembra non funzionare.

Comunque una soluzione l'ho trovata: scambiare non gli elementi stessi ma il loro intero contenuto. E funziona.

Dato un file XML:
Codice:
<?xml version="1.0" encoding="ISO-8859-1"?>
<agenda>
  <appuntamento><data>01/12/2008</data></appuntamento>
  <appuntamento><data>05/10/2007</data></appuntamento>
  <appuntamento><data>16/07/2008</data></appuntamento>
  <appuntamento><data>20/04/2008</data></appuntamento>
</agenda>
Con questo codice, ordino per data e scrivo su un nuovo file:

Codice:
import java.io.*;
import java.util.*;
import java.text.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import org.jdom.output.Format;

public class TestAgenda {
    public static DateFormat df;

    public static void main(String[] args) {
        try {
            df = new SimpleDateFormat("dd/MM/yyyy");
            df.setLenient(false);

            SAXBuilder builder = new SAXBuilder();
            Document doc = builder.build("agenda.xml");

            Element agenda = doc.getRootElement();

            List appuntamenti = agenda.getChildren("appuntamento");
            int size = appuntamenti.size();

            for (int i = 0; i < size-1; i++) {
                for (int j = i+1; j < size; j++) {
                    Element appuntamento1 = (Element) appuntamenti.get(i);
                    Element appuntamento2 = (Element) appuntamenti.get(j);

                    Calendar calendar1 = parseDate(appuntamento1.getChildTextTrim("data"));
                    Calendar calendar2 = parseDate(appuntamento2.getChildTextTrim("data"));

                    if (calendar1.after(calendar2)) {
                        List content1 = appuntamento1.removeContent();
                        List content2 = appuntamento2.removeContent();

                        appuntamento1.setContent(content2);
                        appuntamento2.setContent(content1);
                    }
                }
            }


            XMLOutputter outputter = new XMLOutputter();
            FileOutputStream output = new FileOutputStream("agenda_ord.xml");
            outputter.output(doc, output);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Calendar parseDate (String s) throws ParseException {
        Date d = df.parse(s);
        Calendar c = Calendar.getInstance();
        c.setTime(d);

        return c;
    }
}
Probabilmente ci sono soluzioni migliori ma ora non ho tempo/voglia di andare ad indagare sulla libreria JDOM.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2008, 21:19   #10
odiojava.net
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 8
Funziona così bene che stò per piangere dalla commozione
Grazie mille, finalmente il programma è sulla buona strada per essere completato ^_^
Ah visto che ci stò ne approfitto per chiedere una cosetta veloce
Sapresti anche come "bloccare in scrittura" un determinato file tramite codice?
In pratica vorrei che mentre il programma è in funzione non si possa modificare il file xml, per poi risbloccarlo ad esecuzione terminata.

Cmq questa è una cosa superflua, la parte importante è fatta
Grazie ancora ^__^
odiojava.net è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
Le nuove offerte Amazon, con aggiornamen...
5 motivi per comprare oggi Motorola Edge...
I produttori di memorie non vogliono inv...
VMware Hosted Private Cloud, il cloud pr...
Le cuffie per giocatori JBL Quantum 910X...
Xiaomi Watch S3 a prezzo dimezzato: 15 g...
Nothing Phone (2a) a poco più di ...
OnePlus prepara due nuovi tablet Android...
ASUS Zenbook supera MacBook Air in tutto...
Amazfit Active 2 a 71,49€ protagonista d...
Tutti gli iPhone avranno display ProMoti...
DLSS 5 irriso sul web, secondo il CEO di...
Scoperta al CERN una particella mai vist...
Stampante HP a 37,99€: Wi-Fi, scanner e ...
OPPO annuncia l'arrivo in Italia della A...
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: 10:48.


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