groovy-lecture/skript/io.md

59 lines
2.5 KiB
Markdown

# 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()
````