# Datei Input / Output Genau wie in anderen Sprachen ist es in Groovy möglich, Operationen auf Dateien auszuführen. Aus Zeitgründen gehen wir in der Vorlesungseinheit und damit auch in diesem Skript nur auf die Grundlegenden Operationen ein. ## 1. Dateien zeilenweise Lesen Um eine Datei zu lesen, bedient man sich der `eachLine()` Methode auf Objekten der Klasse `java.io.File`. Diese nimmt ein Closure als Argument und wendet den Ausdruck auf jede Zeile der Datei an. Das ausgeben einer Datei auf der Konsole würde dann wie folgt aussehen: ````Groovy import java.io.File new File("./example.txt").eachLine { line -> println "${line}" } ```` ## 2. Lesen einer Datei als Ganzes: Es ist jedoch genauso möglich eine Datei direkt als Ganzes zu lesen. Hierzu gibt man einfach das `.text` Attribut der Klasse `File` in das `println`-Statement. ````Groovy File file = new File("./example.txt") println file.text ```` ## 3. Schreiben von Dateien: Um in eine Datei zu schreiben, muss man sich einen `Writer` erstellen lassen. Dies macht man mit der `withWriter()`-Methode der Klasse `File`. Die Methode bekommt dann die entsprechende Zeichenkodierung (z.B. UTF-8) als Argument übergeben: ````Groovy new File("./example.txt").withWriter('utf-8') { writer -> writer.writeLine("Hallo Welt!") } ```` Um mehrere Zeilen in einem Rutsch in eine Datei zu schreiben würde man wie folgt vorgehen: ````Groovy def lines = ['Zeile 1', 'Zeile 2', 'Zeile 3'] new File('path/to/file.txt').withWriter { writer -> lines.each { line -> writer.writeLine(line) } } ```` ## 4. Größe und Pfad einer Datei ermitteln Um die Größe und den absoluten Pfad einer Datei zu ermitteln, benutzt man die Methode `length()` der File Klasse und das Attribut `absolutePath`. Dies würde dann wie folgt aussehen: ````Groovy File file = new File("./example.txt") println "Die Datei liegt hier: ${file.absolutePath}" println "Die Datei hat folgende Größe (in Bytes): ${file.length}" ```` ## 5. Testen, ob eine Datei ein Verzeichnis ist: Das Testen, ob eine Datei ein Verzeichnis oder eine herkömmliche Datei ist funktioniert wie folgt: ````Groovy def file = new File("E:/") println "Die Datei ist eine normale Datei: ${file.isFile()}" // false println "Die Datei ist ein Verzeichnis: ${file.isDirectory()}" // true ```` ## 6. Erstellen eines Verzeichnisses: Verzeichnisse erstellen kann man mit der `file.mkdir()` Methode. Dazu geht man folgendermaßen vor: ````Groovy def file = new File("E:/Directory") file.mkdir() ````