File I/O: Leggere e Scrivere File
🎯 Obiettivi
- Leggere input da tastiera
- Leggere file di testo
- Scrivere su file
- Gestire percorsi e directory
⌨️ Input da Tastiera con Scanner
import java.util.Scanner;
public class InputUtente {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Come ti chiami? ");
String nome = scanner.nextLine();
System.out.print("Quanti anni hai? ");
int eta = scanner.nextInt();
System.out.println("\nCiao " + nome + ", hai " + eta + " anni!");
scanner.close();
}
}
📖 Leggere da File
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class LetturaFile {
public static void main(String[] args) {
try {
File file = new File("dati.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String riga = scanner.nextLine();
System.out.println(riga);
}
scanner.close();
} catch (FileNotFoundException e) {
System.out.println("File non trovato!");
}
}
}
✍️ Scrivere su File
import java.io.FileWriter;
import java.io.IOException;
public class ScritturFile {
public static void main(String[] args) {
try {
FileWriter writer = new FileWriter("output.txt");
writer.write("Prima riga\n");
writer.write("Seconda riga\n");
writer.write("Terza riga\n");
writer.close();
System.out.println("File scritto con successo!");
} catch (IOException e) {
System.out.println("Errore scrittura: " + e.getMessage());
}
}
}
📋 BufferedReader per File Grandi
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class LetturaVeloce {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(
new FileReader("dati.txt")
);
String riga;
while ((riga = reader.readLine()) != null) {
System.out.println(riga);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
💾 Esempio Completo: Rubrica
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
class Contatto {
String nome;
String telefono;
public Contatto(String nome, String telefono) {
this.nome = nome;
this.telefono = telefono;
}
public String toString() {
return nome + "," + telefono;
}
}
public class Rubrica {
private ArrayList contatti;
private String nomeFile;
public Rubrica(String nomeFile) {
this.nomeFile = nomeFile;
this.contatti = new ArrayList<>();
caricaContatti();
}
public void aggiungiContatto(String nome, String telefono) {
contatti.add(new Contatto(nome, telefono));
salvaContatti();
System.out.println("Contatto aggiunto!");
}
public void mostraContatti() {
if (contatti.isEmpty()) {
System.out.println("Nessun contatto");
return;
}
System.out.println("\n=== Rubrica ===");
for (int i = 0; i < contatti.size(); i++) {
Contatto c = contatti.get(i);
System.out.println((i+1) + ". " + c.nome + " - " + c.telefono);
}
}
private void salvaContatti() {
try {
FileWriter writer = new FileWriter(nomeFile);
for (Contatto c : contatti) {
writer.write(c.toString() + "\n");
}
writer.close();
} catch (IOException e) {
System.out.println("Errore salvataggio!");
}
}
private void caricaContatti() {
try {
File file = new File(nomeFile);
if (!file.exists()) return;
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String riga = scanner.nextLine();
String[] parti = riga.split(",");
if (parti.length == 2) {
contatti.add(new Contatto(parti[0], parti[1]));
}
}
scanner.close();
} catch (IOException e) {
System.out.println("Errore caricamento!");
}
}
public static void main(String[] args) {
Rubrica rubrica = new Rubrica("rubrica.txt");
Scanner input = new Scanner(System.in);
while (true) {
System.out.println("\n1. Aggiungi contatto");
System.out.println("2. Mostra contatti");
System.out.println("3. Esci");
System.out.print("Scelta: ");
int scelta = input.nextInt();
input.nextLine(); // Consuma newline
if (scelta == 1) {
System.out.print("Nome: ");
String nome = input.nextLine();
System.out.print("Telefono: ");
String tel = input.nextLine();
rubrica.aggiungiContatto(nome, tel);
} else if (scelta == 2) {
rubrica.mostraContatti();
} else if (scelta == 3) {
break;
}
}
input.close();
System.out.println("Arrivederci!");
}
}
✏️ Esercizi
Esercizio 1: Conta Parole
FACILELeggi un file e conta quante parole contiene
Esercizio 2: Registro Voti
MEDIOSalva e carica voti da file con nome studente e voti
Esercizio 3: Diario
MEDIOCrea un'applicazione per scrivere e leggere un diario da file
🎯 Concetti Chiave
- Scanner per input tastiera e file
- FileWriter per scrivere file
- BufferedReader per file grandi
- Usa try-catch per gestire IOException
- Chiudi sempre i file con close()