Skip to content

Latest commit

 

History

History
208 lines (152 loc) · 8.68 KB

README.md

File metadata and controls

208 lines (152 loc) · 8.68 KB

JavaFileManager

Made by @matbagnoletti

Ultimo commit Linguaggio

Descrizione

Questo progetto ha lo scopo di creare una classe (JavaFileManager) che permetta l'input e output in Java da e verso file. L'obiettivo è quello di rendere l'utilizzo degli stream più semplice e veloce, sfruttando l'incapsulamento Java per nasconderne all'utente la complessità.

Tip

La classe JavaFileManager è thread-safe, quindi può essere utilizzata in ambienti multi-thread. Tuttavia, l'uso eccessivo della sincronizzazione può portare a una diminuzione delle prestazioni, quindi utilizzala con attenzione.

Novità

  • Versione 1.0.0 (deprecata):

    • Rilascio iniziale.
  • Versione 1.1.0 (deprecata):

    • Aggiunta la possibilità di creare direttamente da JFM (se specificato) il file con il percorso nel costruttore.
    • Metodi di scrittura e lettura con firme più esplicite.
    • Nuovi metodi per la gestione del file direttamente da JFM.
  • Versione 1.2.0:

    • Corretto funzionamento dei metodi di scrittura e lettura per dati tipizzati.
    • Inserimento del metodo termina() per liberare le risorse al termine dell'utilizzo di JFM (doveroso).

Disclaimer

A causa di un errore di progettazione, la versione 1.0.0 e 1.1.0 sono deprecate e se ne sconsiglia altamente l'uso. Si consiglia di utilizzare la versione 1.2.0 o successive.

Utilizzo

Per utilizzare JFM è necessario:

  1. Creare un'istanza della classe JavaFileManager:

    Il costruttore accetta tre parametri: String nomeFile (il nome del file con il percorso dalla root del progetto), boolean creaSeNNull (se true, nel caso in cui il file specificato non esista, viene creato) e boolean mostraAvvisi (se true, mostra eventuali avvisi ed errori a video).

    /* Mostra avvisi ed errori a video. Richiederà di inserire il percorso del file successivamente. */
    JavaFileManager jfm = new JavaFileManager();
    
    /* Non mostra avvisi ed errori a video. Richiederà di inserire il percorso del file successivamente. */
    JavaFileManager jfm = new JavaFileManager(false);
    jfm.setFile("percorso/del/tuo/file.txt");
    
    /* Mostra di default avvisi ed errori a video. Richiederà di inserire il percorso del file successivamente. */
    JavaFileManager jfm = new JavaFileManager(true);
    jfm.setFile("percorso/del/tuo/file.txt");
    
    /* Mostra di default avvisi ed errori a video. Il percorso del file è quello specificato. */
    JavaFileManager jfm = new JavaFileManager("percorso/del/tuo/file.txt");
    
    /* Mostra avvisi ed errori a video. Il percorso del file è quello specificato. Se non esiste lo crea. */
    JavaFileManager jfm = new JavaFileManager("percorso/del/tuo/fileInesistente.txt", true);
  2. Utilizzare i metodi di scrittura appropriati:

    JFM permette di scrivere su un file in tre modi:

  3. Utilizzare i metodi di lettura appropriati:

    JFM permette di leggere da un file in tre modi:

  4. Utilizzare i metodi di gestione del file:

    JFM permette di gestire il file in tre modi:

  5. Chiudere l'istanza di JavaFileManager:

    È doveroso chiudere l'istanza di JavaFileManager con il metodo termina() per liberare le risorse.

    jfm.termina();

Scrivere nel formato standard

La modalità standard di scrittura su file utilizza la classe BufferedWriter e accetta 3 parametri:

  • String testoDaScrivere: il testo da scrivere sul file.

  • boolean mandaACapo: se true, manda a capo dopo aver scritto il testo.

  • boolean cancellaContenutoPrecedente: se true cancella il contenuto precedente del file, altrimenti scrive in append.

    jfm.scrivi("Ciao,");
    jfm.scrivi(" Mondo!", true);
    /* Scrive "Ciao,", concatena " Mondo!" ed, infine, manda a capo (attenzione agli spazi) */
    
    jfm.scrivi("Ciao, mondo!", true);
    /* Scrive "Ciao, mondo!" e manda a capo */
    
    jfm.scrivi("Ciao, mondo!", true, true);
    /* Scrive "Ciao, mondo!" e manda a capo, cancellando il contenuto precedente del file */

Scrivere un oggetto serializzato

La modalità di scrittura su file di un oggetto serializzato utilizza la classe ObjectOutputStream e accetta un parametro:

  • Object oggetto: l'oggetto da scrivere sul file.

    jfm.scriviOggetto(new Object());

Caution

L'oggetto deve essere serializzabile. Il file dovrà poi essere opportunamente letto con leggiOggetto().

Scrivere dati tipizzati

La modalità di scrittura su file di dati tipizzati utilizza la classe DataOutputStream e accetta due parametri:

  • String/int/double/float testoDaScrivere: il testo da scrivere sul file.

  • boolean cancellaContenutoPrecedente: se true cancella il contenuto precedente del file, altrimenti scrive in append.

    jfm.scriviTipizzato(1);
    jfm.scriviTipizzato("Ciao, Mondo!");

Caution

La classe DataOutputStream scrive i dati in formato binario uno di seguito all'altro. È quindi è necessario leggerli con i metodi corrispondenti:

  • leggiString().
  • leggiInt().
  • leggiDouble().
  • leggiFloat().

I dati dovranno essere letti necessariamente nello stesso ordine in cui sono stati scritti altrimenti JFM genererà un errore. È doveroso terminare l'istanza di JavaFileManager con il metodo termina() per liberare le risorse.

Leggere nel formato standard

La modalità standard di lettura da file utilizza la classe BufferedReader.

String testo = jfm.leggi();

Leggere un oggetto serializzato

La modalità di lettura da file di un oggetto serializzato utilizza la classe ObjectInputStream.

Object oggetto = jfm.leggiOggetto();

Caution

L'oggetto deve essere serializzabile. Il file deve essere stato opportunamente scritto con scriviOggetto().

Leggere dati tipizzati

La modalità di lettura da file di dati tipizzati utilizza la classe DataInputStream. I dati letti sono scritti in formato binario uno di seguito all'altro. L'ordine di lettura è dunque importante.

//Nel file: 10"Ciao, mondo!" (in formato binario)
int intero = jfm.leggiInt(); // 10
String testo = jfm.leggiString(); // "Ciao, mondo!"

Caution

Il file deve essere stato opportunamente scritto con il metodo scriviTipizzato().

I dati devono essere letti necessariamente nello stesso ordine in cui sono stati scritti.

Eliminare il file

Ora è possibile eliminare il file con il metodo elimina() sfruttando le proprietà della classe File di Java.

jfm.elimina();

Cancellare il contenuto del file

Ora è possibile cancellare il contenuto del file con il metodo cancellaContenuto().

jfm.cancellaContenuto();

Copiare il contenuto da/a un altro file

Ora è possibile copiare il contenuto da/a un altro file con il metodo copiaDa() e copiaIn(). Entrambi i metodi accettano un parametro che può essere di due tipi:

  • String nomeFile: il percorso del file da cui copiare o in cui copiare il contenuto.

  • JavaFileManager jfm: l'istanza di JavaFileManager da cui copiare o in cui copiare il contenuto.

    JavaFileManager jfm = new JavaFileManager("percorso/del/tuo/file.txt");
    jfm.copiaDa("percorso/del/tuo/file/da/cui/copiare.txt");
    
    JavaFileManager jfm2 = new JavaFileManager("percorso/del/tuo/file.txt");
    jfm.copiaIn(jfm2);

Caution

Entrambi i metodi utilizzano la scrittura standard e la lettura standard, per cui si applicano le stesse considerazioni fatte per tali metodi.

Licenza d'uso

Questo progetto (e tutte le sue versioni) sono rilasciate sotto la MB General Copyleft License.