Översikt av Java I/O-strömmar

Importera data i Java

Anthony Markham

VP Quant Developer

Grunderna i strömmar

  • Strömmar är enkelriktade datarör med FIFO-ordning (First In, First Out)
  • Byteströmmar arbetar med rå binärdata (InputStream/OutputStream)
  • Teckenströmmar hanterar text med automatisk kodning (Reader/Writer)

Representation av strömmar

Importera data i Java

Byteströmmar

  • Används för binärdata (bilder, ljud m.m.)
  • Abstrakta basklasser: InputStream (läsning), OutputStream (skrivning)
  • Viktiga implementationer: FileInputStream, FileOutputStream
  • Viktiga metoder: read() returnerar bytes, write() skriver bytes

Binärfiler: bilder och ljud

Importera data i Java

Byteströmmar

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

byte[] buffer = new byte[1024]; int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) { // Process bytes in buffer
System.out.println("Read " + bytesRead + " bytes"); }
} catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
Importera data i Java

Teckenströmmar

  • Utformade specifikt för textdata
  • Abstrakta basklasser: Reader (läsning av text), Writer (skrivning av text)
  • Viktiga implementationer: FileReader, FileWriter, BufferedReader, BufferedWriter
  • Praktisk metod: readLine() läser en hel textrad

CSV-filer

Importera data i Java

Teckenströmmar

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

while ((line = reader.readLine()) != null) { // Process each line System.out.println(line); }
} catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
Importera data i Java

Buffrade strömmar – prestanda

  • Förbättrar prestandan genom att minska diskoperationer
  • Läs/skriv byte-strömmar med BufferedInputStream och BufferedOutputStream
  • Läs/skriv tecken-strömmar med BufferedReader, BufferedWriter
    • Läs en hel rad med readLine()
Importera data i Java

Buffrade strömmar – prestanda

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

// Efficient data reading String line; int count = 0; while ((line = reader.readLine()) != null) { count++; } System.out.println("Read " + count + " data rows"); } catch (Exception e) { System.out.println("Error: " + e.getMessage()); }
Importera data i Java

Strömkedja

  • Varje ström i kedjan tillför specifik funktionalitet
  • Vanligt mönster: FileInputStream -> InputStreamReader -> BufferedReader
  • Stäng alltid den yttersta strömmen (övriga stängs automatiskt)
Importera data i Java

Strömkedja

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("Error: " + e.getMessage()); }
Importera data i Java

Undantagshantering

  • Avgörande för I/O-operationer
  • Vanliga undantag: IOException, FileNotFoundException
  • Använd alltid try-with-resources för att hantera undantag
Importera data i Java

Undantagshantering

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 automatically closed here return lines;
}
Importera data i Java

Nu kör vi en övning!

Importera data i Java

Preparing Video For Download...