File I/O and Resources

def file = new File("data.txt")
file.text = "line 1\nline 2\n"                 // write (overwrite)
file << "line 3\n"                             // append
file.append("line 4\n", "UTF-8")
println file.text                              // read all
file.eachLine { line, n -> println "$n: $line" }
def lines = file.readLines()
file.withWriter('UTF-8') { w -> w.writeLine "rewritten" }
file.withWriterAppend { it << "appended\n" }
file.withReader { r -> println r.readLine() }
file.withInputStream { is -> /* binary */ }
byte[] bytes = file.bytes
file.bytes = [72, 105] as byte[]
println file.exists(), file.size(), file.name, file.parent, file.absolutePath, file.lastModified()

def dir = new File("project")
dir.mkdirs()
dir.eachFile { f -> println f.name }
dir.eachFileRecurse(groovy.io.FileType.FILES) { f -> println f.path }
dir.eachFileMatch(~/.*\.groovy/) { println it }
dir.traverse(type: groovy.io.FileType.FILES, nameFilter: ~/.*\.txt/, maxDepth: 2) { println it }
new File("a.txt").renameTo("b.txt")
new File("b.txt").delete()
dir.deleteDir()                                 // recursive delete

// NIO Path (Groovy NIO extensions)
import java.nio.file.*
def path = Paths.get("nio.txt")
pat
…