Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

Groovy provides a number of helper methods for working with I/O. All of these work with standard Java Reader/Writer and InputStream/OutputStream and File and URL classes.
The use of closures allows resources to be processed ensuring that things are properly closed irrespective of exceptions. e.g. to iterate through each line of a file the following can be used...

Code Block
new File("foo.txt").eachLine { line -> println(line) }

If for whatever reason the println() method were to throw an exception, the eachLine() method ensures that the file resource is correctly closed. Similarly if an exception occurs while reading, the resource will be closed too.

If you wish to use a reader/writer object or an input/output stream object there are helper methods to handle the resource for you via a closure - which will automatically close down any resource if an exception occurs. e.g.

Code Block
def count=0, MAXSIZE=100
new File("foo.txt").withReader { reader ->
  while (reader.readLine() != null) {
    if (++count > MAXSIZE) throw new RuntimeException('File too large!')
  }
}

and

Code Block
def fields = ["a":"1", "b":"2", "c":"3"]
new File("foo.ini").withWriter { out ->
    fields.each() { key, value ->
        out.writeLine("${key}=${value}")
    }
}

Further Information