Made by @matbagnoletti
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.
-
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).
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.
Per utilizzare JFM è necessario:
-
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(setrue, nel caso in cui il file specificato non esista, viene creato) eboolean mostraAvvisi(setrue, 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);
-
Utilizzare i metodi di scrittura appropriati:
JFM permette di scrivere su un file in tre modi:
- formato standard (con
BufferedWriter). - formato oggetto serializzato (con
ObjectOutputStream). - formato dati tipizzati (con
DataOutputStream).
- formato standard (con
-
Utilizzare i metodi di lettura appropriati:
JFM permette di leggere da un file in tre modi:
- formato standard (con
BufferedReader). - formato oggetto serializzato (con
ObjectInputStream). - formato dati tipizzati (con
DataInputStream).
- formato standard (con
-
Utilizzare i metodi di gestione del file:
JFM permette di gestire il file in tre modi:
-
Chiudere l'istanza di
JavaFileManager:È doveroso chiudere l'istanza di
JavaFileManagercon il metodotermina()per liberare le risorse.jfm.termina();
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: setrue, manda a capo dopo aver scritto il testo. -
boolean cancellaContenutoPrecedente: setruecancella 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 */
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().
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: setruecancella 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.
La modalità standard di lettura da file utilizza la classe BufferedReader.
String testo = jfm.leggi();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().
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.
Ora è possibile eliminare il file con il metodo elimina() sfruttando le proprietà della classe File di Java.
jfm.elimina();Ora è possibile cancellare il contenuto del file con il metodo cancellaContenuto().
jfm.cancellaContenuto();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 diJavaFileManagerda 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.
Questo progetto (e tutte le sue versioni) sono rilasciate sotto la MB General Copyleft License.