252-0027Einfü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 eineDatei 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
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
Was sind Exceptions?
Eine Exception (Ausnahme) ist die Folge eines Fehlerszur 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 vomProgramm gefangen werden!• Compiler checkt das; sonst wird
das Programm nicht übersetzt
• Müssen festlegen, wie unserProgramm mit I/O-Problemenumgeht… 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
throws-Beispiel
Jetzt ist der Compiler zufrieden!• Exceptions, welche die main-Methode wirft, werden vom
System gefangen (und produzieren einen Stacktrace) 18
CHECK
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:
20File 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