[Guida]Java- i File strutturati e di testo

  1. #1
    Utente Esperto L'avatar di Eagle2
    Data Registrazione
    Aug 2013
    Messaggi
    228
    Java
    Vediamo cosa sono i file o archivi e come si creano e gestiscono in Java!

    Gli archivi di dati sono un insieme di informazioni registrate su un supporto di memorizzazione, come un disco o un nastro magnetico. L' insieme di queste informazioni presenti in memoria sono indicate con il termine di file.
    In java oltre agli array-vettori dove i dati memorizzati ed utilizzati una volta terminato il programma vengono persi (perché salvati in memoria centrale) c'è la possibilità di creare file in questo modo i dati che andremo a memorizzare al suo interno saranno permanenti (perché il file viene salvato in supporti di memorizzazione secondari).
    Ma vediamo quali sono le operazioni che possiamo eseguire sui file :



    • Apertura : con quest' operazione stabiliamo un collegamento tra la memoria centrale e l' unità di memoria di massa dove e salvato il file per svolgere su esso delle operazioni;
    • Lettura : (read) con quest' operazione i dati del file vengono trasferiti in memoria centrale;
    • Scrittura : (write) con quest' operazione succede l' inverso di quella della lettura quindi i dati vengono trasferiti dalla memoria centrale sul file;
    • Chiusura : con quest' operazione termina il collegamento tra memoria centrale e file.


    la lettura si indica anche con input e la scrittura con output.


    Vediamo come gestisce Java le operazioni di I/O (input/output) dei file !

    Java gestisce tutte le operazioni di I/O utilizzando il package o libreria java.io di conseguenza java gestisce anche i file , però introducendo il concetto di stream cioè flusso di dati. Gli stream constituiscono in pratica sequenze ordinate di dati e si dividono in :
    - stream di input, dove i dati vengono presi da una sorgente e vengono trasferiti al programma che gli richiede;

    -stream di output, dove i dati vengono generati dal programma e diretti verso una destinazione.
    Gli stream vengono creati in Java istanziando le classi adeguate contenuto nel package java.io .
    vediamo quali sono queste classi che le possiamo classificare in due categorie principali :



    • classi basate sui byte
    • classi basate sui caratteri


    In Java questa differenza è marcata dal fatto che i byte sono formati da 8 bit mentre i caratteri sono gestiti con 16 bit.
    Le classi basate sui byte hanno come sopraclasse InputStream ( per gli stream di input) e OutputStream (per gli stream di output).

    Le classi basate sui caratteri hanno come sopraclasse Reader (per gli stream di input) e Write (per gli stream di output) .


    File strutturati e file di testo!
    vediamo le differenze.
    I file strutturati sono composti da una strutture definita nel programma : per interpretare il contenuto di un file strutturato se ne deve conoscere la struttura. Per esempio un file formato da sequenze di due numeri interi, un numero reale e una stringa, può essere letto sol oconoscendo questo ordine, altrimenti si ottengono risultati imprevisti.
    Al contrario un file di testo è composto da sequenze di linee di caratteri, in cui ogni linea termina con un carattere speciale di fine riga. Il contenuto di questi file può essere letto anche usando un editor di testi.
    Un altra differenza è che i file strutturati utilizzano le classi basate sui byte per le operazioni di I/O mentr ei dile di testo usano le classi basate sui caratteri.

    File Strutturati :
    Vediamo come Java tratta i file strutturati spesso indicato come serializzazione.



    • Apertura e chiusura :

    L' apertura di un file strutturato per le operazioni di output, cioè per la scrittura , viene fatta tramite la dichiarazione dei seguenti oggetti:

    Codice:
    FileOutputStream f = new FileOutputStream("elenco.dat");
    ObjectOutputStream fOUT = new ObjectOutputStream(f);
    la prima riga crea uno stream f per scrivere sul file elenco.dat .Le operazioni di scrittura non vengono fatte direttamente su questo stream, ma sul secondo stream creato dalla classe ObjectOutputStream. E' in questa classe che sono contenuti i metodi per la scrittura.

    Usando i comandi scritti qui sopra, se i lfile elenco.dat esiste viene sovrascritto e viene cancellato tutto il suo contenuto. Quindi se volete aprire un file esistente per accodare dei valori si deve sostituire la creazione del FileOutputStream cosi':

    Codice:
    FileOutputStream f = new FileOutputStream("elenco.dat", true);
    il valore passato nel secondo parametro indica la condizione di accodamento (append) se è true i lfile viene aperto per aggiungere dati in coda a quelli gia esistenti. Se il secondo parametro non viene passato o e false, il file viene aperto in scrittura e questo comporta la cancellazione di eventuali dati già presenti.

    L'apertura di u nfile strutturato pe rle operazioni di input, cioè per la lettura, viene fatta tramite la dichiarazione dei seguenti oggetti:
    Codice:
    FileInputStream f = new FileInputStream("elenco.dat");
    ObjectInputStream fIN = new ObjectInputStream(f);
    la prima riga crea f per leggere dal file elenco.dat . Le operazioni di lettura non vengono fatte direttamente su questo stream, ma sul secondo stream creato dalla classe ObjectInputStream. E' qua che sono contenuti i metodi per la lettura dei dati memorizzati.

    La chiusura di uno stream sia di input che di output si fa richiamando il metodo close nel seguente modo :
    Codice:
    f.close();

    Le operazioni che gestiscono l'I/O possono generare diverse eccezioni, per esempio il metodo close riscontra una situazione anomala oppure quando l'apertura di uno stream di input specifica un nume di file non esistente. Per gestire queste eccezioni in java abbiamo il costrutto trycatch, il quale serve per controllare esattamente dove si verifica l'errore o eccezzione.
    vediamo come si crea questo blocco di trycatch :
    Codice:
    try
    {
         //istruzioni di I/O
    }
    catch(Exception e)
    {
        System.out.println("eccezzione : " +e.getMessage());
    }
    • Scrittura

    Una colta che è stato aperto lo stream di output, si possono utilizzare diversi metodi per la scrittura. Ogni metodo memorizza sul file un particolare tipo di dato e assume la forma writeDato. Al posto di dato si sostituisce il tipo di dato che vogliamo memorizzare.
    Vediamo come fare:
    Codice:
    fOUT.writeInt(40250);
    fOUT.writeDouble(12.36)
    Ricordate prima di chiudere il file è importante eseguire il metodo flush, che serve per scrivere su disco tutti i dati che erano memorizzari momentaneamente nel buffer dello stream.


    Vediamo un esempio di tutto quello che abbiamo visto fino ad ora
    :
    creiamo la classe (Persona.java)
    Codice:
    import java.io.*;
    
    public class Persona implements Serializable
    {
            public String nome;
            public int eta;
    
            //costruttore
            public Persona(String nome, int eta)
            {
                    this.nome = nome;
                    this.eta = eta;
            }
    }
    Programma (ScriviDati.Java)
    Codice:
    import java.io.*;
    
    public class ScriviDati 
    {
        public static void main(String [] args)
        {
             Persona p1, p2, p3;
             p1 = new Persona("Mario" , 31);
             p2 = new Persona("Luigi" , 25);
             p3 = new Persona("Lorenzo " , 16)
       
             try
             {
                      FileOutputStream f = new FileOutputStream(elenco.dat");
                      ObjectOutputStream fOUT = new ObjectOutputStream(f);
     
                      fOUT.writeObject(p1);
                      f.OUT.writeObject(p2);
                      fOUT.writeObject(p3);
                      fOUT.flush();
    
                      f.close();
             }
             catch(Exception e)
             {
                      System.out.println("Eccezzione : "+e.getMessage());
             }
        }
    }


    • Lettura

    Per leggere informazioni da un file strutturato, si usano i metodi della classe ObjectInputStream. Questi metodi li troviamo in forma readDato dove al posto di dato si mette il tipo di dato che vogliamo leggere.
    Tra i metodi di lettura c'è il metodo readObject che consente di recuperare un oggetto salvato in precedenza.Questo metodo ci restituisce un oggetto di classe Object che attraverso il casting può essere riportato alla sua classe originaria.
    Se non conosciamo quanti sono i dati contenuti in un file, possiamo utilizzare un ciclo infinito per continuare a leggere finche non si presenta l' eccezzione EOFException(EOF sta per end of file).
    Questa eccezzione segnale che siamo arrivati alla fine del file e non ci sono più dati da leggere, e di conseguenza quindi possiamo interrompere il ciclo.

    Vediamo un esempio creando un programma che legge i dai dal file elenco.dat creato in precedenza e ci stampa le informazioni delle persone memorizzate.

    Codice:
    import java.io.*;
    
    public class LeggiDati
    {
        public static void main(String[]args)
        {
            Persona p;
            try
            {
                FileInputStream f = new FileInputStream("elenco.dat");
                ObjectInputStream fIN = new ObjectInputStream(f);
                //ciclo infinito per leggere i dati
                while (true)
                {
                   try
                   {
                       p = (Persona) fIN.readObject();
                       System.out.println("\nNome: "+p.nome);
                       System.out.println("Eta' : "+p.eta);
                   }
                   catch(EOFException e)
                   {
                      //interrompe i lcilo
                     break;
                   }
                }
                f.close();
            }
            catch(Exception e )
            {
                  System.out.println("Eccezione : "+e.getMessage());
            }
        }
    }
    Bene spero di essere stato ababstanza chiaro se avete dubbi basta chiedere domani aggiornerò messaggio con il continuo cioè i file di testo e farò degli esempi sulle operazioni di aperture chiusura scrittura e lettura.

    File di Testo :


    • Apertura e Chiusura:

    L' apertura di u nfile di testo per le operazioni di output,quindi per la scrittura, viene fatta con la dichiarazione dei seguenti oggetti :
    Codice:
    FileWriter f = new FileWriter("agenda.txt");
    PrintWriter fOUT = new PrintWriter(f);
    la prima riga crea uno stream f per scrivere sul file agenda.txt. Nella classe PrintWriter dove vengono fatte le operazioni di scrittura sono contenuti i metodi per essa.

    Come per i file strutturati se usiamo i metodi qui sopra se i lfile agenda.txt esiste verrà sovrascritto. Quindi se vogliamo aprire un file esistente per aggiungere dei valori si deve scrivere il seguente metodo:
    Codice:
    FileWriter f = new FileWriter ("agenda.txt", true);
    Come visto in precedenza dichiarando il secondo parametro indichiamo la condizione di accodamento. Quindi se dichiariamo true il file viene aperto per aggiungere dati in coda a quelli gia esistenti, se al contrario è false o no nviene dichiarato il file verrà aperto e di conseguenza sovrascritto .

    L' apertura di un file di testo invece per le operazioni di input, cioè per la lettura, viene fatta con la dichiarazione dei seguenti oggetti :
    Codice:
    FileReader f = new FileInputStream("agenda.txt");
    BufferedReader fIN = new BufferedReader(f);
    la prima riga crea uno stream f per leggere i dati dal file agenda.txt . Mentre la classe BufferedReader dentro la quale avvengono le operazioni di lettura e anche la classe che contiene i metodi per la lettura dei dati e memorizzazione d iessi.

    La chiusura di un file di testo avviene come quella dello strutturato tramite questa istruzione:
    Codice:
    f.close();
    Come per i strutturati le operazioni che gestiscono l'I/O dei file di testo possono generare diverse eccezzioni le quali dovremmo andare a gestire con i lcostrutto trycatch .

    Aggiornero guida prossimamente per vedere le operazioni di scrittura con u nesempio di programma e anche quelle di lettura alla fine della guida avrete tre codici i quali formano una piccola agenda in più vi farò l' esempio di codice su come si copiano i file.


    Ultima modifica di Eagle2; 26-09-2013 alle 21:30

  2. #2
    Utente Esperto L'avatar di Eagle2
    Data Registrazione
    Aug 2013
    Messaggi
    228
    Guida aggiornata prossimo aggiornamento cerchero di finirla tutta i lfatto è che son oconcetti ababstanza lunghi e ci sono molte cose da spiegare cerchero di riassumere . Spero vi torni utile

  3. #3
    Grazie Eagle per questa guida molto utile!

Termini piu ricercati:

file strutturati java

usare archivi dati in java

metodi write file strutturato

file strutturato

dichiarare una dll in java

come sostituire dati in un file di testo java

come strutturato javaguida file in javadifderenza tra file di testo efile strutturati javascrittura sul file strutturato javametodi java per inserire testo su file aperti in letturajava leggere file fine scritturajava leggere file testo strutturatohttp:tecnogers.altervista.orgforumjava531-guida-java-i-file-strutturati-e-di-testo.htmltesto al contrario javaCosa sono i file stutturatiarchivio file strutturatidifferenza file di testo e file strutturatimetodi read() file strutturatoaggiungere dati in coda a un file javascrivere su un file di testo javafile strutturata javascrivere strutturatocosa sono i file strutturatijava file strutturato