Groovy provides a number of
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...
If for whatever reason the doSomething() 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.
Groovy provides a simple way to execute command line processes.
The expression returns a java.lang.Process instance which can have the in/out/err streams processed along with the exit value inspected etc.
Remember that many commands are shell built-ins and need special handling (just like java). So if you want a listing of directory on a windows machine and if you write
you will get IOException saying Cannot run program "dir": CreateProcess error=2, The system cannot find the file specified
You will need to write