Java fornisce una serie di classi apposite per le operazioni su File, vediamo come usarle.
Per operazioni su file di testo Java mette a disposizione le classi FileWriter e FileReader, da usare assieme alla classe File.
Qui sotto trovi il codice per lettura e scrittura su file di testo.
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try{
//Creo un file
File file = new File("prova.txt");
//creo uno stream per scrivere su file
FileWriter writer = new FileWriter(file);
//scrivo su file
writer.write("Sto scrivendo un file di testo!");
//chiudo lo stream
writer.close();
System.out.println("Scrittura completata!");
}
catch(IOException e){
System.out.println("Errore durante la scrittura: "+ e);
}
}
}
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try{
//Apro un file
File file = new File("prova.txt", true);
//creo uno stream per scrivere su file, il secondo parametro (true) indica la modalità append
FileWriter writer = new FileWriter(file, true);
//scrivo su file
writer.write("Sto facendo l'append su un file di testo!");
//chiudo lo stream
writer.close();
System.out.println("Scrittura completata!");
}
catch(IOException e){
System.out.println("Errore durante la scrittura: "+ e);
}
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try{
//Apro il file
File file = new File("prova.txt");
//creo uno stream per leggere da file
FileReader reader = new FileReader(file);
//questo mi permette di leggere linee intere
BufferedReader lineReader = new BufferedReader(reader);
System.out.println("Contenuto: ");
//Leggo una linea alla volta e la stampo finchè non arrivo alla fine del file
String linea = lineReader.readLine();
while(linea != null) {
System.out.println(linea);
linea = lineReader.readLine();
}
//chiudo lo stream
lineReader.close();
reader.close();
System.out.println("Lettura completata!");
}
catch(IOException e){
System.out.println("Errore durante la lettura: "+ e);
}
}
}
import java.io.File;
public class Main {
public static void main(String[] args) {
//Apro un file
File file = new File("prova.txt");
//provo ad eliminare il file
if(file.delete()){
System.out.println("Eliminazione completata!");
}
else{
System.out.println("Eliminazione fallita");
}
}
}
Java, rispetto a C, introduce un nuovo modo di scrivere dati su file: la serializzazione, che permette di leggere e scrivere oggetti trasformandoli in byte. I file di oggetti serializzati sono indipendenti dalla piattaforma, e possono quindi essere trasferiti su computer con architetture diverse.
Per essere serializzato correttamente, un oggetto deve implementare l’interfaccia Serializable.
Vediamo un esempio:
import java.io.Serializable;
public class Alunno implements Serializable {
private String nome;
private String cognome;
private double media;
public Alunno() {}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCognome() {
return cognome;
}
public void setCognome(String cognome) {
this.cognome = cognome;
}
public double getMedia() {
return media;
}
public void setMedia(double media) {
this.media = media;
}
}
Per leggere e scrivere su file useremo rispettivamente ObjectInputStream e ObjectOutputStream.
Qui sotto trovi il codice per lettura e scrittura di file binari.
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class Main {
public static void main(String[] args) {
Alunno a = new Alunno("Mario","Rossi", 9);
try{
//Creo un file
File file = new File("prova.dat");
//creo uno stream per scrivere su file binario
FileOutputStream fileOut = new FileOutputStream(file);
//creo uno stream per scrivere oggetti
ObjectOutputStream objectOut = new ObjectOutputStream(fileOut);
//scrivo su file un oggetto
objectOut.writeObject(a);
//chiudo lo stream
objectOut.close();
fileOut.close();
System.out.println("Scrittura completata!");
}
catch(IOException e){
System.out.println("Errore durante la scrittura: "+ e);
}
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class Main {
public static void main(String[] args) {
try{
//Apro un file
File file = new File("prova.dat");
//creo uno stream per leggere su file binario
FileInputStream fileIn = new FileInputStream(file);
//creo uno stream per leggere oggetti
ObjectInputStream objectIn = new ObjectInputStream(fileIn);
//leggo un oggetto da file
Alunno a = (Alunno) objectIn.readObject();
System.out.println(a.getNome() + " " + a.getCognome() + " " + a.getMedia());
//chiudo lo stream
objectIn.close();
fileIn.close();
System.out.println("Lettura completata!");
}
catch(IOException e){
System.out.println("Errore durante la Lettura: "+ e);
}
catch(ClassNotFoundException e){
System.out.println("Errore durante la Lettura: "+ e);
}
}
}