Panoramica Java I/O Streams

Importare dati in Java

Anthony Markham

VP Quant Developer

Fondamenti degli stream

  • Gli stream sono canali unidirezionali di dati con ordine FIFO (First In, First Out)
  • I flussi di byte lavorano con dati binari grezzi (InputStream/OutputStream)
  • I flussi di caratteri gestiscono il testo con codifica automatica (Reader/Writer)

Rappresentazione degli stream

Importare dati in Java

Flussi di Byte

  • Usato per dati binari (immagini, audio, ecc.)
  • Classi astratte di base: InputStream (lettura), OutputStream (scrittura)
  • Implementazioni chiave: FileInputStream, FileOutputStream
  • Metodi chiave: read() restituisce byte, write() scrive byte

File binari: immagini e audio

Importare dati in Java

Flussi di Byte

try (FileInputStream fis = new FileInputStream("data.bin")) {

byte[] buffer = new byte[1024]; int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) { // Elabora i byte nel buffer
System.out.println("Lettura di " + bytesRead + " byte"); }
} catch (Exception e) { System.err.println("Errore: " + e.getMessage()); }
Importare dati in Java

Flussi di Caratteri

  • Progettato specificamente per dati di testo
  • Classi astratte di base: Reader (lettura testo), Writer (scrittura testo)
  • Implementazioni chiave: FileReader, FileWriter, BufferedReader, BufferedWriter
  • Metodi utili: readLine() legge un'intera linea di testo

File CSV

Importare dati in Java

Flussi di Caratteri

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    String line;

while ((line = reader.readLine()) != null) { // Elabora ogni linea System.out.println(line); }
} catch (Exception e) { System.err.println("Errore: " + e.getMessage()); }
Importare dati in Java

Buffered Streams - prestazioni

  • Migliora le prestazioni riducendo le operazioni su disco
  • Leggi/scrivi flussi di byte con BufferedInputStream e BufferedOutputStream
  • Leggi/scrivi flussi di caratteri con BufferedReader, BufferedWriter
    • Leggi un'intera linea con readLine()
Importare dati in Java

Buffered Streams - prestazioni

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    // Elaborazione intestazione
    String header = reader.readLine();
    System.out.println("Intestazione: " + header);

// Lettura dati efficiente String line; int count = 0; while ((line = reader.readLine()) != null) { count++; } System.out.println("Lettura di " + count + " righe di dati"); } catch (Exception e) { System.out.println("Errore: " + e.getMessage()); }
Importare dati in Java

Catena di stream

  • Ogni stream nella catena aggiunge funzionalità specifiche
  • Schema comune: FileInputStream -> InputStreamReader -> BufferedReader
  • Chiudi sempre lo stream più esterno (gli altri si chiudono automaticamente)
Importare dati in Java

Catena di stream

import java.nio.charset.StandardCharsets;
try (

BufferedReader reader = new BufferedReader(
new InputStreamReader(
new FileInputStream("data.csv"),
StandardCharsets.UTF_8 )
)
) { String line; while ((line = reader.readLine()) != null) { System.out.println(line);} } catch (Exception e) { System.err.println("Errore: " + e.getMessage()); }
Importare dati in Java

Gestione delle eccezioni

  • Cruciale per operazioni I/O
  • Eccezioni comuni: IOException, FileNotFoundException
  • Usa sempre try-with-resources per gestire le eccezioni
Importare dati in Java

Gestione delle eccezioni

import java.util.ArrayList;
import java.util.List;
public static List<String> readLines(String filePath) throws IOException {

List<String> lines = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; while ((line = reader.readLine()) != null) { lines.add(line); } } // Stream chiuso automaticamente qui return lines;
}
Importare dati in Java

Ayo berlatih!

Importare dati in Java

Preparing Video For Download...