252-0027
Einführung in die Programmierung
5.2 Input/Output mit Dateien
Michael Faes & Thomas R. Gross Departement Informatik
Manipulieren von Dateien
Klasse File erlaubt Operationen mit Dateien (Files)
• Lesen/schreiben
• Informationen abrufen, z.B. Grösse
• Umbenennen, löschen, …
2
import java.io.*;
File file = new File("example.txt");
if (file.exists() && file.length() > 1000) { file.delete();
}
Import nötig!
File-Methoden
3
exists() Gibt true zurück, falls diese Datei existiert, sonst false
canRead() Gibt true zurück, falls diese Datei gelesen werden kann, sonst false
getName() Gibt den Namen diese Datei zurück length() Gibt die Dateigrösse, in Bytes, zurück delete() Löscht die Datei!
renameTo(file) Bennent die Datei um!
Datei-“Handle”
Ausdruck new File("example.txt") erstellt keine Datei!
Sondern nur ein Objekt (“handle”), welches für eine Datei mit diesem Namen steht
• Und mit welchem diese Datei manipuliert werden kann
Datei, für welche File steht, kann existieren oder nicht
• Deshalb: exists()
4
File Input
Lesen aus einer Datei
5
Lesen aus einer Datei
Das können Sie schon!
Oder kürzer:
6
import java.io.*; // für File
import java.util.*; // für Scanner File file = new File("input.txt");
Scanner scanner = new Scanner( );
int zahl = scanner.nextInt();
file
Scanner scanner = new Scanner(new File("input.txt"));
(Text-Datei erstellen)
In Eclipse auf Projekt rechtsklicken New File Dateinamen eingeben, z.B. input.txt Finish
In Editor Text eingeben, z.B. 42, dann speichern.
7
Dokumentation für Scanner
8
“Konstruktoren”
Es gibt verschiedene Möglichkeiten, einen Scanner aufzusetzen.
9
“FileNotFoundException”
10
Was bedeutet das?
Compiler-Fehler…
Wenn wir nichts machen, reklamiert der Compiler…
11
Was sind Exceptions?
Eine Exception (Ausnahme) ist die Folge eines Fehlers zur Laufzeit des Programmes:
• Eine ganze Zahl durch 0 dividieren
• Zugriff auf ein Array-Element, das nicht existiert
• Lesen eines falschen Typs im Scanner
• Lesen einer Datei, die nicht existiert
Wir sagen, ein Programm mit einem Fehler “wirft”
(throws) eine Exception.
12
Exception-Beispiel
13
void main() { // ...
foo();
// ...
}
void foo() { bar();
// ...
}
void bar() { int x = 2;
int y = 10/x;
// ...
}
Exception-Beispiel
14
void main() { // ...
foo();
// ...
}
void foo() { bar();
// ...
}
void bar() { int x = 0;
int y = 10/x;
// ...
}
Fehler!
Exceptions auffangen
Ein Programm kann Exceptions auch “auffangen” (catch), um auf Fehler zu reagieren
Gewisse Exceptions (“checked Exceptions”) müssen vom Programm gefangen werden!
• Compiler checkt das; sonst wird das Programm nicht übersetzt
• Müssen festlegen, wie unser Programm mit I/O-Problemen umgeht…
15
throws-Ankündigung
throws: Ankündigung in der Deklaration einer Methode
• Deklariert, dass Methode evtl. eine Exception wirft…
• … und nicht selber wieder auffängt!
D.h. wer die Methode aufruft, muss Exception fangen (oder sie wiederum ankündigen)
Syntax: public static void foo(…) throws type
• Wobei type die Art der geworfenen Exception ist
16
Das kennen wir doch schon…
17
throws-Beispiel
Jetzt ist der Compiler zufrieden!
• Exceptions, welche die main-Methode wirft, werden vom
System gefangen (und produzieren einen Stacktrace)
18
CHECK
File Output
In eine Datei schreiben
19
PrintStream-Klasse
Wie File aus java.io; erlaubt es Daten auszugeben (z.B. in eine File)
Alle Methoden, die wir von System.out kennen, funktionieren auch für PrintStream!
• D.h. print(), println()
Syntax:
20
File file = new File("example.txt");
PrintStream output = new PrintStream(file);
Statt in Konsole, in Datei
21
for (int i = 0; i < 10; i++) {
.print("Hello World ");
.print(i);
.println("!");
}
System.out System.out System.out
Statt in Konsole, in Datei
22
import java.io.*;
File file = new File("output.txt");
PrintStream fileOutput = new PrintStream(file);
for (int i = 0; i < 10; i++) {
.print("Hello World ");
.print(i);
.println("!");
}
fileOutput fileOutput fileOutput
Datei-Ausgabe
Wenn Datei nicht existiert, wird sie erstellt Wenn sie existiert, wird sie überschrieben!
Ausgabe ansehen:
• In Eclipse auf Projekt
rechtsklicken Refresh
• Datei output.txt sollte erscheinen
• Doppelklick