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
JavaFileManager
con 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
: setrue
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 */
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
: setrue
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.
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 diJavaFileManager
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.
Questo progetto (e tutte le sue versioni) sono rilasciate sotto la MB General Copyleft License.