1. Einleitung
In der Programmierung muss man fast immer mit Dateien arbeiten. Beispiele kennt jeder: das Speichern eines Notiztexts, des Fortschritts in einem Spiel, das Kopieren eines Bildes oder das Lesen von Einstellungen aus einer Konfigurationsdatei.
In Java gibt es dafür moderne und bequeme Werkzeuge: Path und Files aus dem Paket java.nio.file. Damit kann man mit wenigen Zeilen Code eine Datei öffnen, ihren Inhalt lesen, Text schreiben oder sogar ein Bild kopieren.
Dateipfad (Path)
Eine Datei liegt immer irgendwo auf dem Datenträger, und um auf sie zuzugreifen, muss man den Pfad angeben. Dafür gibt es in Java die Klasse Path, und ein neues Objekt erstellt man mit der Methode Path.of().
Path path = Path.of("hello.txt"); // relativer Pfad
Path absPath = Path.of("C:/Users/Me/image.png"); // absoluter Pfad (Windows)
Erläuterung:
- Ein relativer Pfad sucht die Datei im aktuellen Projektordner (z. B. "hello.txt").
- Ein absoluter Pfad gibt die vollständige Adresse an: Laufwerk, Ordner und Dateiname.
2. Arbeit mit Textdateien
Aus Sicht von Java lassen sich alle Dateien in zwei Typen einteilen – Text- und Binärdateien. Ist der Inhalt als für Menschen lesbarer Text darstellbar, handelt es sich um eine Textdatei. In allen anderen Fällen ist es einfach eine Folge von Bytes (eine Binärdatei).
Text in eine Datei schreiben – writeString
Um eine Zeichenkette in eine Datei zu schreiben, verwenden wir die Methode writeString.
Path p = Path.of("hello.txt");
Files.writeString(p, "Hallo, Datei!");
Was passiert hier:
- Wir erstellen ein Path-Objekt, das auf "hello.txt" zeigt;
- mit der Methode writeString schreiben wir die Zeichenkette hinein;
- falls die Datei nicht existiert, wird sie automatisch angelegt.
So lassen sich Notizen oder Nachrichten bequem in einer Textdatei speichern.
Text aus einer Datei lesen – readString
Die Methode readString lädt die gesamte Datei auf einmal in eine Zeichenkette.
Path p = Path.of("hello.txt");
String content = Files.readString(p);
System.out.println(content);
Nun enthält die Variable content den Inhalt der Datei. Das ist praktisch für kleine Dateien: Konfigurationsdateien, Texte, JSON-Dokumente.
3. Arbeit mit Binärdateien
Nicht alle Dateien bestehen aus Text. Bilder, Musik, Archive – das sind Bytefolgen. Für die Arbeit damit gibt es die Methoden write und readAllBytes.
Bytes in eine Datei schreiben – write
Die Methode write() ermöglicht, ein Byte-Array in eine Datei zu schreiben. Man nennt es auch einen Puffer (byte buffer).
byte[] data = {65, 66, 67, 68}; // Zeichen A B C D
Files.write(Path.of("letters.bin"), data);
Hier haben wir ein Array von Bytes in eine Datei geschrieben. Öffnet man die Datei als Text, stehen darin die Buchstaben "ABCD".
Bytes lesen – readAllBytes
Um den Inhalt der Datei wieder als Byte-Array zu erhalten, verwenden wir die Methode readAllBytes.
byte[] buffer = Files.readAllBytes(Path.of("letters.bin"));
// den gelesenen Byte-Array auf dem Bildschirm ausgeben
for (byte b : buffer)
{
System.out.print((char)b + " ");
}
Auf dem Bildschirm erscheint:
A B C D
Diese Vorgehensweise wird für beliebige Binärdateien verwendet – Bilder, Dokumente, Musik.
4. Häufige Anwendungsfälle im Umgang mit Dateien
Der wohl häufigste Anwendungsfall beim Arbeiten mit Dateien ist das Kopieren einer Datei.
Dateien kopieren
Um eine Datei zu kopieren, kann man sie einfach in ein Byte-Array einlesen und in eine andere Datei schreiben.
Path in = Path.of("logo.png");
Path out = Path.of("logo_copy.png");
byte[] bytes = Files.readAllBytes(in);
Files.write(out, bytes);
So lassen sich Bilder, Dokumente und beliebige andere Dateien kopieren, ohne sich um deren Format kümmern zu müssen.
Existenz und Größe prüfen
Manchmal muss man sicherstellen, dass eine Datei existiert, und ihre Größe ermitteln. Dafür gibt es die Methoden exists und size.
Path p = Path.of("hello.txt");
if (Files.exists(p))
{
long size = Files.size(p);
System.out.println("Datei gefunden, Größe: " + size + " Byte");
}
else
{
System.out.println("Datei nicht gefunden!");
}
Das ist hilfreich zur Diagnose: So wissen Sie genau, ob Sie mit der richtigen Datei arbeiten.
5. Ausnahmen
Die Arbeit mit Dateien kann fehlschlagen: Die Datei existiert nicht, es fehlen Zugriffsrechte, das Laufwerk ist voll oder die Datei wird von einem anderen Programm verwendet. Deshalb sollten Dateioperationen in try-catch gekapselt werden oder die Ausnahmen mit throws nach außen weitergereicht werden.
try
{
String content = Files.readString(Path.of("hello.txt"));
System.out.println(content);
}
catch (IOException e)
{
System.out.println("Fehler beim Lesen: " + e.getMessage());
}
So stürzt das Programm nicht ab, sondern informiert den Benutzer sauber darüber, was passiert ist. Falls erforderlich, kann die Ausnahme IOException mit dem Schlüsselwort throws an die nächsthöhere Ebene im Stack weitergereicht werden.
GO TO FULL VERSION