5.2 input/output mit dateien - homepage | eth zürich · 2018-10-16 · 5.2 input/output mit...

23
252-0027 Einführung in die Programmierung 5.2 Input/Output mit Dateien Michael Faes & Thomas R. Gross Departement Informatik

Upload: others

Post on 22-May-2020

20 views

Category:

Documents


0 download

TRANSCRIPT

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

File InputLesen 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”

10Was bedeutet das?

Compiler-Fehler…

Wenn wir nichts machen, reklamiert der Compiler…

11

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

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 OutputIn 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:

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

Datei-Ausgabe

Wenn Datei nicht existiert, wird sie erstellt

Wenn sie existiert, wird sie überschrieben!

Ausgabe ansehen:

• In Eclipse auf Projektrechtsklicken Refresh

• Datei output.txt sollteerscheinen

• Doppelklick 23