Package: org.codehaus.groovy.runtime

## [Java] Class ResourceGroovyMethods

- org.codehaus.groovy.runtime.ResourceGroovyMethods

-     public class ResourceGroovyMethods
      extends DefaultGroovyMethodsSupport

  This class defines new groovy methods for Files, URLs, URIs which appear on normal JDK classes inside the Groovy environment. Static methods are used with the first parameter being the destination class, i.e. `public static long size(File self)` provides a `size()` method for `File`.

  NOTE: While this class contains many 'public' static methods, it is primarily regarded as an internal class (its internal package name suggests this also). We value backwards compatibility of these methods when used within Groovy but value less backwards compatibility at the Java method call level. I.e. future versions of Groovy may remove or move a method call in this file but would normally aim to keep the method available from within Groovy.

- - ### Field Summary

    Fields
    Modifiers | Name | Description
    --- | --- | ---
    `static boolean` | `FILE_EXISTS_ENABLED` | When `true` (the default), coercing a File or Path to a `boolean` returns whether the underlying file exists.

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public static void` | `append(File file, Object text)` Append the text at the end of the File without writing a BOM.
    `` | `public static void` | `append(File file, Object text, boolean writeBom)` Append the text at the end of the File.
    `` | `public static void` | `append(File file, Reader reader)` Append the text supplied by the Writer at the end of the File without writing a BOM.
    `` | `public static void` | `append(File file, Writer writer)` Append the text supplied by the Writer at the end of the File without writing a BOM.
    `` | `public static void` | `append(File file, Writer writer, boolean writeBom)` Append the text supplied by the Writer at the end of the File.
    `` | `public static void` | `append(File file, byte[] bytes)` Append bytes to the end of a File.
    `` | `public static void` | `append(File self, InputStream stream)` Append binary data to the file.
    `` | `public static void` | `append(File file, Object text, String charset)` Append the text at the end of the File without writing a BOM, using a specified encoding.
    `` | `public static void` | `append(File file, Object text, String charset, boolean writeBom)` Append the text at the end of the File, using a specified encoding.
    `` | `public static void` | `append(File file, Writer writer, String charset)` Append the text supplied by the Writer at the end of the File without writing a BOM, using a specified encoding.
    `` | `public static void` | `append(File file, Writer writer, String charset, boolean writeBom)` Append the text supplied by the Writer at the end of the File, using a specified encoding.
    `` | `public static void` | `append(File file, Reader reader, boolean writeBom)` Append the text supplied by the Reader at the end of the File, using a specified encoding.
    `` | `public static void` | `append(File file, Reader reader, String charset)` Append the text supplied by the Reader at the end of the File without writing a BOM, using a specified encoding.
    `` | `public static void` | `append(File file, Reader reader, String charset, boolean writeBom)` Append the text supplied by the Reader at the end of the File, using a specified encoding.
    `` | `public static boolean` | `asBoolean(File file)` Coerce the file to a `boolean` value.
    `<T>` | `public static T` | `asType(File f, Class<T> c)` Converts this File to a Writable or delegates to default DefaultGroovyMethods.asType.
    `` | `public static File` | `asWritable(File file)` Converts this File to a Writable.
    `` | `public static File` | `asWritable(File file, String encoding)` Allows a file to return a Writable implementation that can output itself to a Writer stream.
    `` | `public static File` | `createParentDirectories(File self)` Creates, if needed, any parent directories for this File.
    `` | `public static boolean` | `deleteDir(File self)` Deletes a directory with all contained files and subdirectories.
    `` | `public static long` | `directorySize(File self)` Calculates directory size as total size of all its files, recursively.
    `` | `public static void` | `eachByte(File self, Closure closure)` Traverse through each byte of this File
    `` | `public static void` | `eachByte(File self, int bufferLen, Closure closure)` Traverse through the bytes of this File, bufferLen bytes at a time.
    `` | `public static void` | `eachByte(URL url, Closure closure)` Reads the InputStream from this URL, passing each byte to the given closure.
    `` | `public static void` | `eachByte(URL url, int bufferLen, Closure closure)` Reads the InputStream from this URL, passing a byte[] and a number of bytes to the given closure.
    `` | `public static void` | `eachDir(File self, Closure closure)` Invokes the closure for each subdirectory in this directory, ignoring regular files.
    `` | `public static void` | `eachDirMatch(File self, Object nameFilter, Closure closure)` Invokes the closure for each subdirectory whose name (dir.name) matches the given nameFilter in the given directory - calling the DefaultGroovyMethods.isCase method to determine if a match occurs.
    `` | `public static void` | `eachDirRecurse(File self, Closure closure)` Recursively processes each descendant subdirectory in this directory.
    `` | `public static void` | `eachFile(File self, FileType fileType, Closure closure)` Invokes the closure for each 'child' file in this 'parent' folder/directory.
    `` | `public static void` | `eachFile(File self, Closure closure)` Invokes the closure for each 'child' file in this 'parent' folder/directory.
    `` | `public static void` | `eachFileMatch(File self, FileType fileType, Object nameFilter, Closure closure)` Invokes the closure for each file whose name (file.name) matches the given nameFilter in the given directory - calling the DefaultGroovyMethods.isCase method to determine if a match occurs.
    `` | `public static void` | `eachFileMatch(File self, Object nameFilter, Closure closure)` Invokes the closure for each file whose name (file.name) matches the given nameFilter in the given directory - calling the DefaultGroovyMethods.isCase method to determine if a match occurs.
    `` | `public static void` | `eachFileRecurse(File self, FileType fileType, Closure closure)` Processes each descendant file in this directory and any subdirectories.
    `` | `public static void` | `eachFileRecurse(File self, Closure closure)` Processes each descendant file in this directory and any subdirectories.
    `<T>` | `public static T` | `eachLine(File self, Closure<T> closure)` Iterates through this file line by line.
    `<T>` | `public static T` | `eachLine(File self, String charset, Closure<T> closure)` Iterates through this file line by line.
    `<T>` | `public static T` | `eachLine(File self, int firstLine, Closure<T> closure)` Iterates through this file line by line.
    `<T>` | `public static T` | `eachLine(File self, String charset, int firstLine, Closure<T> closure)` Iterates through this file line by line.
    `<T>` | `public static T` | `eachLine(URL url, Closure<T> closure)` Iterates through the lines read from the URL's associated input stream passing each line to the given 1 or 2 arg closure.
    `<T>` | `public static T` | `eachLine(URL url, int firstLine, Closure<T> closure)` Iterates through the lines read from the URL's associated input stream passing each line to the given 1 or 2 arg closure.
    `<T>` | `public static T` | `eachLine(URL url, String charset, Closure<T> closure)` Iterates through the lines read from the URL's associated input stream passing each line to the given 1 or 2 arg closure.
    `<T>` | `public static T` | `eachLine(URL url, String charset, int firstLine, Closure<T> closure)` Iterates through the lines read from the URL's associated input stream passing each line to the given 1 or 2 arg closure.
    `` | `public static void` | `eachObject(File self, Closure closure)` Iterates through the given file object by object.
    `` | `public static Writable` | `filterLine(File self, Closure closure)` Filters the lines of a File and creates a Writable in return to stream the filtered lines.
    `` | `public static Writable` | `filterLine(File self, String charset, Closure closure)` Filters the lines of a File and creates a Writable in return to stream the filtered lines.
    `` | `public static void` | `filterLine(File self, Writer writer, Closure closure)` Filter the lines from this File, and write them to the given writer based on the given closure predicate.
    `` | `public static void` | `filterLine(File self, Writer writer, String charset, Closure closure)` Filter the lines from this File, and write them to the given writer based on the given closure predicate.
    `` | `public static Writable` | `filterLine(URL self, Closure predicate)` Filter lines from a URL using a closure predicate.
    `` | `public static Writable` | `filterLine(URL self, String charset, Closure predicate)` Filter lines from a URL using a closure predicate.
    `` | `public static void` | `filterLine(URL self, Writer writer, Closure predicate)` Uses a closure to filter lines from this URL and pass them to the given writer.
    `` | `public static void` | `filterLine(URL self, Writer writer, String charset, Closure predicate)` Uses a closure to filter lines from this URL and pass them to the given writer.
    `` | `public static String` | `getBaseName(File self)` Provide the file's name without an extension.
    `` | `public static byte[]` | `getBytes(File file)` Read the content of the File and returns it as a byte[].
    `` | `public static byte[]` | `getBytes(URL url)` Read the content of this URL and returns it as a byte[].
    `` | `public static byte[]` | `getBytes(URL url, Map<String, ?> parameters)` Read the content of this URL and returns it as a byte[].
    `` | `public static String` | `getExtension(File self)` Provide the extension of this file.
    `` | `public static String` | `getText(File file, String charset)` Read the content of the File using the specified encoding and return it as a String.
    `` | `public static String` | `getText(File file)` Read the content of the File and returns it as a String.
    `` | `public static String` | `getText(URL url)` Read the content of this URL and returns it as a String.
    `` | `public static String` | `getText(URL url, Map<String, ?> parameters)` Read the content of this URL and returns it as a String.
    `` | `public static String` | `getText(URL url, String charset)` Read the data from this URL and return it as a String.
    `` | `public static String` | `getText(URL url, Map<String, ?> parameters, String charset)` Read the data from this URL and return it as a String.
    `` | `public static File` | `leftShift(File file, Object text)` Write the text to the File.
    `` | `public static File` | `leftShift(File file, byte[] bytes)` Write bytes to a File.
    `` | `public static File` | `leftShift(File file, InputStream data)` Append binary data to the file.
    `` | `public static DataInputStream` | `newDataInputStream(File file)` Create a data input stream for this file
    `` | `public static DataOutputStream` | `newDataOutputStream(File file)` Creates a new data output stream for this file.
    `` | `public static BufferedInputStream` | `newInputStream(File file)` Creates a buffered input stream for this file.
    `` | `public static BufferedInputStream` | `newInputStream(URL url)` Creates a buffered input stream for this URL.
    `` | `public static BufferedInputStream` | `newInputStream(URL url, Map<String, ?> parameters)` Creates a buffered input stream for this URL.
    `` | `public static ObjectInputStream` | `newObjectInputStream(File file)` Create an object input stream for this file.
    `` | `public static ObjectInputStream` | `newObjectInputStream(File file, ClassLoader classLoader)` Create an object input stream for this file using the given class loader.
    `` | `public static ObjectOutputStream` | `newObjectOutputStream(File file)` Create an object output stream for this file.
    `` | `public static BufferedOutputStream` | `newOutputStream(File file)` Create a buffered output stream for this file.
    `` | `public static PrintWriter` | `newPrintWriter(File file)` Create a new PrintWriter for this file.
    `` | `public static PrintWriter` | `newPrintWriter(File file, String charset)` Create a new PrintWriter for this file, using specified charset.
    `` | `public static BufferedReader` | `newReader(File file)` Create a buffered reader for this file.
    `` | `public static BufferedReader` | `newReader(File file, String charset)` Create a buffered reader for this file, using the specified charset as the encoding.
    `` | `public static BufferedReader` | `newReader(URL url)` Creates a buffered reader for this URL.
    `` | `public static BufferedReader` | `newReader(URL url, Map<String, ?> parameters)` Creates a buffered reader for this URL.
    `` | `public static BufferedReader` | `newReader(URL url, String charset)` Creates a buffered reader for this URL using the given encoding.
    `` | `public static BufferedReader` | `newReader(URL url, Map<String, ?> parameters, String charset)` Creates a buffered reader for this URL using the given encoding.
    `` | `public static BufferedWriter` | `newWriter(File file)` Create a buffered writer for this file.
    `` | `public static BufferedWriter` | `newWriter(File file, boolean append)` Creates a buffered writer for this file, optionally appending to the existing file content.
    `` | `public static BufferedWriter` | `newWriter(File file, String charset, boolean append)` Helper method to create a buffered writer for a file without writing a BOM.
    `` | `public static BufferedWriter` | `newWriter(File file, String charset, boolean append, boolean writeBom)` Helper method to create a buffered writer for a file.
    `` | `public static BufferedWriter` | `newWriter(File file, String charset)` Creates a buffered writer for this file, writing data without writing a BOM, using a specified encoding.
    `` | `public static byte[]` | `readBytes(File file)` Reads the content of the file into a byte array.
    `` | `public static List<String>` | `readLines(File file)` Reads the file into a list of Strings, with one item for each line.
    `` | `public static List<String>` | `readLines(File file, String charset)` Reads the file into a list of Strings, with one item for each line.
    `` | `public static List<String>` | `readLines(URL self)` Reads the URL contents into a list, with one element for each line.
    `` | `public static List<String>` | `readLines(URL self, String charset)` Reads the URL contents into a list, with one element for each line.
    `` | `public static String` | `relativePath(File self, File to)` Relative path to file.
    `` | `public static boolean` | `renameTo(File self, String newPathName)` Renames the file.
    `` | `public static void` | `setBytes(File file, byte[] bytes)` Write the bytes from the byte array to the File.
    `` | `public static void` | `setText(File file, String text)` Synonym for write(text) allowing file.text = 'foo'.
    `` | `public static void` | `setText(File file, String text, String charset)` Synonym for write(text, charset) allowing:
         myFile.setText('some text', charset)
    or with some help from `ExpandoMetaClass`, you could do something like:
         myFile.metaClass.setText = { String s -> delegate.setText(s, 'UTF-8') }
         myfile.text = 'some text'
    `` | `public static long` | `size(File self)` Provide the standard Groovy `size()` method for `File`.
    `<T>` | `public static T` | `splitEachLine(File self, String regex, Closure<T> closure)` Iterates through this file line by line, splitting each line using the given regex separator.
    `<T>` | `public static T` | `splitEachLine(File self, Pattern pattern, Closure<T> closure)` Iterates through this file line by line, splitting each line using the given separator Pattern.
    `<T>` | `public static T` | `splitEachLine(File self, String regex, String charset, Closure<T> closure)` Iterates through this file line by line, splitting each line using the given regex separator.
    `<T>` | `public static T` | `splitEachLine(File self, Pattern pattern, String charset, Closure<T> closure)` Iterates through this file line by line, splitting each line using the given regex separator Pattern.
    `<T>` | `public static T` | `splitEachLine(URL self, String regex, Closure<T> closure)` Iterates through the input stream associated with this URL line by line, splitting each line using the given regex separator.
    `<T>` | `public static T` | `splitEachLine(URL self, Pattern pattern, Closure<T> closure)` Iterates through the input stream associated with this URL line by line, splitting each line using the given regex separator Pattern.
    `<T>` | `public static T` | `splitEachLine(URL self, String regex, String charset, Closure<T> closure)` Iterates through the input stream associated with this URL line by line, splitting each line using the given regex separator.
    `<T>` | `public static T` | `splitEachLine(URL self, Pattern pattern, String charset, Closure<T> closure)` Iterates through the input stream associated with this URL line by line, splitting each line using the given regex separator Pattern.
    `` | `public static URI` | `toURI(CharSequence self)` Transforms a CharSequence representing a URI into a URI object.
    `` | `public static URI` | `toURI(String self)` Transforms a String representing a URI into a URI object.
    `` | `public static URL` | `toURL(CharSequence self)` Transforms a CharSequence representing a URL into a URL object.
    `` | `public static URL` | `toURL(String self)` Transforms a String representing a URL into a URL object.
    `` | `public static void` | `traverse(File self, Map<String, ?> options, Closure closure)` Processes each descendant file in this directory and any subdirectories.
    `` | `public static void` | `traverse(File self, Closure closure)` Processes each descendant file in this directory and any subdirectories.
    `` | `public static void` | `traverse(File self, Map<String, ?> options)` Invokes the closure specified with key 'visit' in the options Map for each descendant file in this directory tree.
    `<T>` | `public static T` | `withDataInputStream(File file, Closure<T> closure)` Create a new DataInputStream for this file and passes it into the closure.
    `<T>` | `public static T` | `withDataOutputStream(File file, Closure<T> closure)` Create a new DataOutputStream for this file and passes it into the closure.
    `` | `public static Object` | `withInputStream(File file, Closure closure)` Create a new InputStream for this file and passes it into the closure.
    `<T>` | `public static T` | `withInputStream(URL url, Closure<T> closure)` Creates a new InputStream for this URL and passes it into the closure.
    `<T>` | `public static T` | `withObjectInputStream(File file, Closure<T> closure)` Create a new ObjectInputStream for this file and pass it to the closure.
    `<T>` | `public static T` | `withObjectInputStream(File file, ClassLoader classLoader, Closure<T> closure)` Create a new ObjectInputStream for this file associated with the given class loader and pass it to the closure.
    `<T>` | `public static T` | `withObjectOutputStream(File file, Closure<T> closure)` Create a new ObjectOutputStream for this file and then pass it to the closure.
    `` | `public static Object` | `withOutputStream(File file, Closure closure)` Creates a new OutputStream for this file and passes it into the closure.
    `<T>` | `public static T` | `withPrintWriter(File file, Closure<T> closure)` Create a new PrintWriter for this file which is then passed it into the given closure.
    `<T>` | `public static T` | `withPrintWriter(File file, String charset, Closure<T> closure)` Create a new PrintWriter with a specified charset for this file.
    `<T>` | `public static T` | `withReader(File file, Closure<T> closure)` Create a new BufferedReader for this file and then passes it into the closure, ensuring the reader is closed after the closure returns.
    `<T>` | `public static T` | `withReader(File file, String charset, Closure<T> closure)` Create a new BufferedReader for this file using the specified charset and then passes it into the closure, ensuring the reader is closed after the closure returns.
    `<T>` | `public static T` | `withReader(URL url, Closure<T> closure)` Helper method to create a new BufferedReader for a URL and then passes it to the closure.
    `<T>` | `public static T` | `withReader(URL url, String charset, Closure<T> closure)` Helper method to create a new Reader for a URL and then passes it to the closure.
    `<T>` | `public static T` | `withWriter(File file, Closure<T> closure)` Creates a new BufferedWriter for this file, passes it to the closure, and ensures the stream is flushed and closed after the closure returns.
    `<T>` | `public static T` | `withWriter(File file, String charset, Closure<T> closure)` Creates a new BufferedWriter for this file, passes it to the closure, and ensures the stream is flushed and closed after the closure returns.
    `<T>` | `public static T` | `withWriterAppend(File file, String charset, Closure<T> closure)` Create a new BufferedWriter which will append to this file.
    `<T>` | `public static T` | `withWriterAppend(File file, Closure<T> closure)` Create a new BufferedWriter for this file in append mode.
    `` | `public static void` | `write(File file, String text)` Write the text to the File without writing a BOM.
    `` | `public static void` | `write(File file, String text, boolean writeBom)` Write the text to the File.
    `` | `public static void` | `write(File file, String text, String charset)` Write the text to the File without writing a BOM, using the specified encoding.
    `` | `public static void` | `write(File file, String text, String charset, boolean writeBom)` Write the text to the File, using the specified encoding.

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class DefaultGroovyMethodsSupport` | `cloneSimilarCollection, cloneSimilarMap, closeQuietly, closeWithWarning, createSimilarArray, createSimilarCollection, createSimilarCollection, createSimilarCollection, createSimilarList, createSimilarMap, createSimilarOrDefaultCollection, createSimilarQueue, createSimilarSet, normaliseIndex, sameType, sameType, subListBorders, subListBorders, subListRange, writeUTF16BomIfRequired, writeUTF16BomIfRequired, writeUTF16BomIfRequired, writeUTF16BomIfRequired`

- - ### Field Detail

    - #### public static final boolean FILE_EXISTS_ENABLED

      When `true` (the default), coercing a File or Path to a `boolean` returns whether the underlying file exists. Set the system property `groovy.truth.file.exists.enabled` to `false` to restore the pre-Groovy-5 behavior where any non-`null` reference is truthy.

  - ### Method Detail

    - #### public static void append(File file, Object text)

      Append the text at the end of the File without writing a BOM.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `text` - the text to append at the end of the File
      Since:
        1.0

    - #### public static void append(File file, Object text, boolean writeBom)

      Append the text at the end of the File. If the default charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias) and `writeBom` is `true`, the requisite byte order mark is written to the file before the text.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `text` - the text to append at the end of the File
        `writeBom` - whether to write a BOM
      Since:
        2.5.0

    - #### public static void append(File file, Reader reader)

      Append the text supplied by the Writer at the end of the File without writing a BOM.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `reader` - the Reader supplying the text to append at the end of the File
      Since:
        2.3

    - #### public static void append(File file, Writer writer)

      Append the text supplied by the Writer at the end of the File without writing a BOM.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `writer` - the Writer supplying the text to append at the end of the File
      Since:
        2.3

    - #### public static void append(File file, Writer writer, boolean writeBom)

      Append the text supplied by the Writer at the end of the File. If the default charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias) and `writeBom` is `true`, the requisite byte order mark is written to the file before the text.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `writer` - the Writer supplying the text to append at the end of the File
        `writeBom` - whether to write a BOM
      Since:
        2.5.0

    - #### public static void append(File file, byte[] bytes)

      Append bytes to the end of a File. It will not be interpreted as text.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `bytes` - the byte array to append to the end of the File
      Since:
        1.5.1

    - #### public static void append(File self, InputStream stream)

      Append binary data to the file. It will not be interpreted as text.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - a File
        `stream` - stream to read data from.
      Since:
        1.5.0

    - #### public static void append(File file, Object text, String charset)

      Append the text at the end of the File without writing a BOM, using a specified encoding.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `text` - the text to append at the end of the File
        `charset` - the charset used
      Since:
        1.0

    - #### public static void append(File file, Object text, String charset, boolean writeBom)

      Append the text at the end of the File, using a specified encoding. If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias), `writeBom` is `true`, and the file doesn't already exist, the requisite byte order mark is written to the file before the text is appended.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `text` - the text to append at the end of the File
        `charset` - the charset used
        `writeBom` - whether to write a BOM
      Since:
        2.5.0

    - #### public static void append(File file, Writer writer, String charset)

      Append the text supplied by the Writer at the end of the File without writing a BOM, using a specified encoding.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `writer` - the Writer supplying the text to append at the end of the File
        `charset` - the charset used
      Since:
        2.3

    - #### public static void append(File file, Writer writer, String charset, boolean writeBom)

      Append the text supplied by the Writer at the end of the File, using a specified encoding. If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias), `writeBom` is `true`, and the file doesn't already exist, the requisite byte order mark is written to the file before the text is appended.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `writer` - the Writer supplying the text to append at the end of the File
        `charset` - the charset used
        `writeBom` - whether to write a BOM
      Since:
        2.5.0

    - #### public static void append(File file, Reader reader, boolean writeBom)

      Append the text supplied by the Reader at the end of the File, using a specified encoding. If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias), `writeBom` is `true`, and the file doesn't already exist, the requisite byte order mark is written to the file before the text is appended.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `reader` - the Reader supplying the text to append at the end of the File
        `writeBom` - whether to write a BOM
      Since:
        2.5.0

    - #### public static void append(File file, Reader reader, String charset)

      Append the text supplied by the Reader at the end of the File without writing a BOM, using a specified encoding.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `reader` - the Reader supplying the text to append at the end of the File
        `charset` - the charset used
      Since:
        2.3

    - #### public static void append(File file, Reader reader, String charset, boolean writeBom)

      Append the text supplied by the Reader at the end of the File, using a specified encoding. If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias), `writeBom` is `true`, and the file doesn't already exist, the requisite byte order mark is written to the file before the text is appended.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `reader` - the Reader supplying the text to append at the end of the File
        `charset` - the charset used
        `writeBom` - whether to write a BOM
      Since:
        2.5.0

    - #### public static boolean asBoolean(File file)

      Coerce the file to a `boolean` value.

      By default this returns whether the file exists. Set the system property `groovy.truth.file.exists.enabled` to `false` to restore the pre-Groovy-5 behavior where any non-`null` `File` is truthy regardless of whether the underlying file exists.

      Parameters:
        `file` - a `File`
      Returns:
        `true` if the file exists, `false` otherwise
      Since:
        5.0.0

    - #### <T> public static T asType(File f, Class<T> c)

      Converts this File to a Writable or delegates to default DefaultGroovyMethods.asType.

      Parameters:
        `f` - a File
        `c` - the desired class
      Returns:
        the converted object
      Since:
        1.0

    - #### public static File asWritable(File file)

      Converts this File to a Writable.

      Parameters:
        `file` - a File
      Returns:
        a File which wraps the input file and which implements Writable
      Since:
        1.0

    - #### public static File asWritable(File file, String encoding)

      Allows a file to return a Writable implementation that can output itself to a Writer stream.

      Parameters:
        `file` - a File
        `encoding` - the encoding to be used when reading the file's contents
      Returns:
        File which wraps the input file and which implements Writable
      Since:
        1.0

    - #### public static File createParentDirectories(File self)

      Creates, if needed, any parent directories for this File.

      throws:
        IOException if the parent directories couldn't be created
      Parameters:
        `self` - a File
      Returns:
        itself

    - #### public static boolean deleteDir(File self)

      Deletes a directory with all contained files and subdirectories.

      The method returns

      - true, when deletion was successful
      - true, when it is called for a non existing directory
      - false, when it is called for a file which isn't a directory
      - false, when directory couldn't be deleted
      Parameters:
        `self` - a File
      Returns:
        true if the file doesn't exist or deletion was successful
      Since:
        1.6.0

    - #### public static long directorySize(File self)

      Calculates directory size as total size of all its files, recursively.

      throws:
        IOException if File object specified does not exist
      throws:
        IllegalArgumentException if the provided File object does not represent a directory
      Parameters:
        `self` - a file object
      Returns:
        directory size (length)
      Since:
        2.1

    - #### public static void eachByte(File self, @ClosureParams(value = SimpleType.class, options = "byte")
      Closure closure)

      Traverse through each byte of this File

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - a File
        `closure` - a closure
      See Also:
        IOGroovyMethods.eachByte
      Since:
        1.0

    - #### public static void eachByte(File self, int bufferLen, @ClosureParams(value = FromString.class, options = "byte[],Integer")
      Closure closure)

      Traverse through the bytes of this File, bufferLen bytes at a time.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - a File
        `bufferLen` - the length of the buffer to use.
        `closure` - a 2 parameter closure which is passed the byte[] and a number of bytes successfully read.
      See Also:
        IOGroovyMethods.eachByte
      Since:
        1.7.4

    - #### public static void eachByte(URL url, @ClosureParams(value = SimpleType.class, options = "byte")
      Closure closure)

      Reads the InputStream from this URL, passing each byte to the given closure. The URL stream will be closed before this method returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - url to iterate over
        `closure` - closure to apply to each byte
      See Also:
        IOGroovyMethods.eachByte
      Since:
        1.0

    - #### public static void eachByte(URL url, int bufferLen, @ClosureParams(value = FromString.class, options = "byte[],Integer")
      Closure closure)

      Reads the InputStream from this URL, passing a byte[] and a number of bytes to the given closure. The URL stream will be closed before this method returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - url to iterate over
        `bufferLen` - the length of the buffer to use.
        `closure` - a 2 parameter closure which is passed the byte[] and a number of bytes successfully read.
      See Also:
        IOGroovyMethods.eachByte
      Since:
        1.8

    - #### public static void eachDir(File self, @ClosureParams(value = SimpleType.class, options = "java.io.File")
      Closure closure)

      Invokes the closure for each subdirectory in this directory, ignoring regular files.

      throws:
        FileNotFoundException if the given directory does not exist
      throws:
        IllegalArgumentException if the provided File object does not represent a directory
      Parameters:
        `self` - a File (that happens to be a folder/directory)
        `closure` - a closure (the parameter passed is the subdirectory file)
      See Also:
        File.listFiles
        eachFile(java.io.File, groovy.io.FileType, groovy.lang.Closure)
      Since:
        1.0

    - #### public static void eachDirMatch(File self, Object nameFilter, @ClosureParams(value = SimpleType.class, options = "java.io.File")
      Closure closure)

      Invokes the closure for each subdirectory whose name (dir.name) matches the given nameFilter in the given directory - calling the DefaultGroovyMethods.isCase method to determine if a match occurs. This method can be used with different kinds of filters like regular expressions, classes, ranges etc. Only subdirectories are matched; regular files are ignored.

      throws:
        FileNotFoundException if the given directory does not exist
      throws:
        IllegalArgumentException if the provided File object does not represent a directory
      Parameters:
        `self` - a File (that happens to be a folder/directory)
        `nameFilter` - the nameFilter to perform on the name of the directory (using the DefaultGroovyMethods.isCase method)
        `closure` - the closure to invoke
      See Also:
        eachFileMatch(java.io.File, groovy.io.FileType, java.lang.Object, groovy.lang.Closure)
      Since:
        1.5.0

    - #### public static void eachDirRecurse(File self, @ClosureParams(value = SimpleType.class, options = "java.io.File")
      Closure closure)

      Recursively processes each descendant subdirectory in this directory. Processing consists of calling `closure` passing it the current subdirectory and then recursively processing that subdirectory. Regular files are ignored during traversal.

      throws:
        FileNotFoundException if the given directory does not exist
      throws:
        IllegalArgumentException if the provided File object does not represent a directory
      Parameters:
        `self` - a File (that happens to be a folder/directory)
        `closure` - a closure
      See Also:
        eachFileRecurse(java.io.File, groovy.io.FileType, groovy.lang.Closure)
      Since:
        1.5.0

    - #### public static void eachFile(File self, FileType fileType, @ClosureParams(value = SimpleType.class, options = "java.io.File")
      Closure closure)

      Invokes the closure for each 'child' file in this 'parent' folder/directory. Both regular files and subfolders/subdirectories can be processed depending on the fileType enum value.

      throws:
        FileNotFoundException if the given directory does not exist
      throws:
        IllegalArgumentException if the provided File object does not represent a directory
      Parameters:
        `self` - a File (that happens to be a folder/directory)
        `fileType` - if normal files or directories or both should be processed
        `closure` - the closure to invoke
      Since:
        1.7.1

    - #### public static void eachFile(File self, @ClosureParams(value = SimpleType.class, options = "java.io.File")
      Closure closure)

      Invokes the closure for each 'child' file in this 'parent' folder/directory. Both regular files and subfolders/subdirectories are processed.

      throws:
        FileNotFoundException if the given directory does not exist
      throws:
        IllegalArgumentException if the provided File object does not represent a directory
      Parameters:
        `self` - a File (that happens to be a folder/directory)
        `closure` - a closure (the parameter passed is the 'child' file)
      See Also:
        File.listFiles
        eachFile(java.io.File, groovy.io.FileType, groovy.lang.Closure)
      Since:
        1.5.0

    - #### public static void eachFileMatch(File self, FileType fileType, Object nameFilter, @ClosureParams(value = SimpleType.class, options = "java.io.File")
      Closure closure)

      Invokes the closure for each file whose name (file.name) matches the given nameFilter in the given directory - calling the DefaultGroovyMethods.isCase method to determine if a match occurs. This method can be used with different kinds of filters like regular expressions, classes, ranges etc. Both regular files and subdirectories may be candidates for matching depending on the value of fileType.

           // collect names of files in baseDir matching supplied regex pattern
           import static groovy.io.FileType.*
           def names = []
           baseDir.eachFileMatch FILES, ~/foo\d\.txt/, { names << it.name }
           assert names == ['foo1.txt', 'foo2.txt']

           // remove all *.bak files in baseDir
           baseDir.eachFileMatch FILES, ~/.*\.bak/, { File bak -> bak.delete() }

           // print out files > 4K in size from baseDir
           baseDir.eachFileMatch FILES, { new File(baseDir, it).size() > 4096 }, { println "$it.name ${it.size()}" }

      throws:
        FileNotFoundException if the given directory does not exist
      throws:
        IllegalArgumentException if the provided File object does not represent a directory
      Parameters:
        `self` - a File (that happens to be a folder/directory)
        `fileType` - whether normal files or directories or both should be processed
        `nameFilter` - the filter to perform on the name of the file/directory (using the DefaultGroovyMethods.isCase method)
        `closure` - the closure to invoke
      Since:
        1.7.1

    - #### public static void eachFileMatch(File self, Object nameFilter, @ClosureParams(value = SimpleType.class, options = "java.io.File")
      Closure closure)

      Invokes the closure for each file whose name (file.name) matches the given nameFilter in the given directory - calling the DefaultGroovyMethods.isCase method to determine if a match occurs. This method can be used with different kinds of filters like regular expressions, classes, ranges etc. Both regular files and subdirectories are matched.

      throws:
        FileNotFoundException if the given directory does not exist
      throws:
        IllegalArgumentException if the provided File object does not represent a directory
      Parameters:
        `self` - a File (that happens to be a folder/directory)
        `nameFilter` - the nameFilter to perform on the name of the file (using the DefaultGroovyMethods.isCase method)
        `closure` - the closure to invoke
      See Also:
        eachFileMatch(java.io.File, groovy.io.FileType, java.lang.Object, groovy.lang.Closure)
      Since:
        1.5.0

    - #### public static void eachFileRecurse(File self, FileType fileType, @ClosureParams(value = SimpleType.class, options = "java.io.File")
      Closure closure)

      Processes each descendant file in this directory and any subdirectories. Processing consists of potentially calling `closure` passing it the current file (which may be a normal file or subdirectory) and then if a subdirectory was encountered, recursively processing the subdirectory. Whether the closure is called is determined by whether the file was a normal file or subdirectory and the value of fileType.

      throws:
        FileNotFoundException if the given directory does not exist
      throws:
        IllegalArgumentException if the provided File object does not represent a directory
      Parameters:
        `self` - a File (that happens to be a folder/directory)
        `fileType` - if normal files or directories or both should be processed
        `closure` - the closure to invoke on each file
      Since:
        1.7.1

    - #### public static void eachFileRecurse(File self, @ClosureParams(value = SimpleType.class, options = "java.io.File")
      Closure closure)

      Processes each descendant file in this directory and any subdirectories. Processing consists of calling `closure` passing it the current file (which may be a normal file or subdirectory) and then if a subdirectory was encountered, recursively processing the subdirectory.

      throws:
        FileNotFoundException if the given directory does not exist
      throws:
        IllegalArgumentException if the provided File object does not represent a directory
      Parameters:
        `self` - a File (that happens to be a folder/directory)
        `closure` - a Closure
      See Also:
        eachFileRecurse(java.io.File, groovy.io.FileType, groovy.lang.Closure)
      Since:
        1.0

    - #### <T> public static T eachLine(File self, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"})
      Closure<T> closure)

      Iterates through this file line by line. Each line is passed to the given 1 or 2 arg closure. The file is read using a reader which is closed before this method returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - a File
        `closure` - a closure (arg 1 is line, optional arg 2 is line number starting at line 1)
      Returns:
        the last value returned by the closure
      See Also:
        eachLine(java.io.File, int, groovy.lang.Closure)
      Since:
        1.5.5

    - #### <T> public static T eachLine(File self, String charset, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"})
      Closure<T> closure)

      Iterates through this file line by line. Each line is passed to the given 1 or 2 arg closure. The file is read using a reader which is closed before this method returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - a File
        `charset` - opens the file with a specified charset
        `closure` - a closure (arg 1 is line, optional arg 2 is line number starting at line 1)
      Returns:
        the last value returned by the closure
      See Also:
        eachLine(java.io.File, java.lang.String, int, groovy.lang.Closure)
      Since:
        1.6.8

    - #### <T> public static T eachLine(File self, int firstLine, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"})
      Closure<T> closure)

      Iterates through this file line by line. Each line is passed to the given 1 or 2 arg closure. The file is read using a reader which is closed before this method returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - a File
        `firstLine` - the line number value used for the first line (default is 1, set to 0 to start counting from 0)
        `closure` - a closure (arg 1 is line, optional arg 2 is line number)
      Returns:
        the last value returned by the closure
      See Also:
        IOGroovyMethods.eachLine
      Since:
        1.5.7

    - #### <T> public static T eachLine(File self, String charset, int firstLine, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"})
      Closure<T> closure)

      Iterates through this file line by line. Each line is passed to the given 1 or 2 arg closure. The file is read using a reader which is closed before this method returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - a File
        `charset` - opens the file with a specified charset
        `firstLine` - the line number value used for the first line (default is 1, set to 0 to start counting from 0)
        `closure` - a closure (arg 1 is line, optional arg 2 is line number)
      Returns:
        the last value returned by the closure
      See Also:
        IOGroovyMethods.eachLine
      Since:
        1.6.8

    - #### <T> public static T eachLine(URL url, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"})
      Closure<T> closure)

      Iterates through the lines read from the URL's associated input stream passing each line to the given 1 or 2 arg closure. The stream is closed before this method returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - a URL to open and read
        `closure` - a closure to apply on each line (arg 1 is line, optional arg 2 is line number starting at line 1)
      Returns:
        the last value returned by the closure
      See Also:
        eachLine(java.net.URL, int, groovy.lang.Closure)
      Since:
        1.5.6

    - #### <T> public static T eachLine(URL url, int firstLine, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"})
      Closure<T> closure)

      Iterates through the lines read from the URL's associated input stream passing each line to the given 1 or 2 arg closure. The stream is closed before this method returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - a URL to open and read
        `firstLine` - the line number value used for the first line (default is 1, set to 0 to start counting from 0)
        `closure` - a closure to apply on each line (arg 1 is line, optional arg 2 is line number)
      Returns:
        the last value returned by the closure
      See Also:
        IOGroovyMethods.eachLine
      Since:
        1.5.7

    - #### <T> public static T eachLine(URL url, String charset, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"})
      Closure<T> closure)

      Iterates through the lines read from the URL's associated input stream passing each line to the given 1 or 2 arg closure. The stream is closed before this method returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - a URL to open and read
        `charset` - opens the stream with a specified charset
        `closure` - a closure to apply on each line (arg 1 is line, optional arg 2 is line number starting at line 1)
      Returns:
        the last value returned by the closure
      See Also:
        eachLine(java.net.URL, java.lang.String, int, groovy.lang.Closure)
      Since:
        1.5.6

    - #### <T> public static T eachLine(URL url, String charset, int firstLine, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"})
      Closure<T> closure)

      Iterates through the lines read from the URL's associated input stream passing each line to the given 1 or 2 arg closure. The stream is closed before this method returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - a URL to open and read
        `charset` - opens the stream with a specified charset
        `firstLine` - the line number value used for the first line (default is 1, set to 0 to start counting from 0)
        `closure` - a closure to apply on each line (arg 1 is line, optional arg 2 is line number)
      Returns:
        the last value returned by the closure
      See Also:
        IOGroovyMethods.eachLine
      Since:
        1.5.7

    - #### public static void eachObject(File self, Closure closure)

      Iterates through the given file object by object.

      throws:
        IOException if an IOException occurs.
      throws:
        ClassNotFoundException if the class is not found.
      Parameters:
        `self` - a File
        `closure` - a closure
      See Also:
        IOGroovyMethods.eachObject
      Since:
        1.0

    - #### public static Writable filterLine(File self, @ClosureParams(value = SimpleType.class, options = "java.lang.String")
      Closure closure)

      Filters the lines of a File and creates a Writable in return to stream the filtered lines.

      throws:
        IOException if `self` is not readable
      Parameters:
        `self` - a File
        `closure` - a closure which returns a boolean indicating to filter the line or not
      Returns:
        a Writable closure
      See Also:
        IOGroovyMethods.filterLine
      Since:
        1.0

    - #### public static Writable filterLine(File self, String charset, @ClosureParams(value = SimpleType.class, options = "java.lang.String")
      Closure closure)

      Filters the lines of a File and creates a Writable in return to stream the filtered lines.

      throws:
        IOException if an IOException occurs
      Parameters:
        `self` - a File
        `charset` - opens the file with a specified charset
        `closure` - a closure which returns a boolean indicating to filter the line or not
      Returns:
        a Writable closure
      See Also:
        IOGroovyMethods.filterLine
      Since:
        1.6.8

    - #### public static void filterLine(File self, Writer writer, @ClosureParams(value = SimpleType.class, options = "java.lang.String")
      Closure closure)

      Filter the lines from this File, and write them to the given writer based on the given closure predicate.

      throws:
        IOException if `self` is not readable
      Parameters:
        `self` - a File
        `writer` - a writer destination to write filtered lines to
        `closure` - a closure which takes each line as a parameter and returns `true` if the line should be written to this writer.
      See Also:
        IOGroovyMethods.filterLine
      Since:
        1.0

    - #### public static void filterLine(File self, Writer writer, String charset, @ClosureParams(value = SimpleType.class, options = "java.lang.String")
      Closure closure)

      Filter the lines from this File, and write them to the given writer based on the given closure predicate.

      throws:
        IOException if an IO error occurs
      Parameters:
        `self` - a File
        `writer` - a writer destination to write filtered lines to
        `charset` - opens the file with a specified charset
        `closure` - a closure which takes each line as a parameter and returns `true` if the line should be written to this writer.
      See Also:
        IOGroovyMethods.filterLine
      Since:
        1.6.8

    - #### public static Writable filterLine(URL self, @ClosureParams(value = SimpleType.class, options = "java.lang.String")
      Closure predicate)

      Filter lines from a URL using a closure predicate. The closure will be passed each line as a String, and it should return `true` if the line should be passed to the writer.

      throws:
        IOException if an IO exception occurs
      Parameters:
        `self` - a URL
        `predicate` - a closure which returns boolean and takes a line
      Returns:
        a writable which writes out the filtered lines
      See Also:
        IOGroovyMethods.filterLine
      Since:
        1.6.8

    - #### public static Writable filterLine(URL self, String charset, @ClosureParams(value = SimpleType.class, options = "java.lang.String")
      Closure predicate)

      Filter lines from a URL using a closure predicate. The closure will be passed each line as a String, and it should return `true` if the line should be passed to the writer.

      throws:
        IOException if an IO exception occurs
      Parameters:
        `self` - the URL
        `charset` - opens the URL with a specified charset
        `predicate` - a closure which returns boolean and takes a line
      Returns:
        a writable which writes out the filtered lines
      See Also:
        IOGroovyMethods.filterLine
      Since:
        1.6.8

    - #### public static void filterLine(URL self, Writer writer, @ClosureParams(value = SimpleType.class, options = "java.lang.String")
      Closure predicate)

      Uses a closure to filter lines from this URL and pass them to the given writer. The closure will be passed each line as a String, and it should return `true` if the line should be passed to the writer.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - the URL
        `writer` - a writer to write output to
        `predicate` - a closure which returns true if a line should be accepted
      See Also:
        IOGroovyMethods.filterLine
      Since:
        1.6.8

    - #### public static void filterLine(URL self, Writer writer, String charset, @ClosureParams(value = SimpleType.class, options = "java.lang.String")
      Closure predicate)

      Uses a closure to filter lines from this URL and pass them to the given writer. The closure will be passed each line as a String, and it should return `true` if the line should be passed to the writer.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - the URL
        `writer` - a writer to write output to
        `charset` - opens the URL with a specified charset
        `predicate` - a closure which returns true if a line should be accepted
      See Also:
        IOGroovyMethods.filterLine
      Since:
        1.6.8

    - #### public static String getBaseName(File self)

      Provide the file's name without an extension.

      Parameters:
        `self` - a file object
      Returns:
        file's name without an extension.
      Since:
        5.0.0

    - #### public static byte[] getBytes(File file)

      Read the content of the File and returns it as a byte[].

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - the file whose content we want to read
      Returns:
        a String containing the content of the file
      Since:
        1.7.1

    - #### public static byte[] getBytes(URL url)

      Read the content of this URL and returns it as a byte[].

      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - URL to read content from
      Returns:
        the byte[] from that URL
      Since:
        1.7.1

    - #### public static byte[] getBytes(URL url, @NamedParam(value = "connectTimeout", type = Integer.class)
      @NamedParam(value = "readTimeout", type = Integer.class)
      @NamedParam(value = "useCaches", type = Boolean.class)
      @NamedParam(value = "allowUserInteraction", type = Boolean.class)
      @NamedParam(value = "requestProperties", type = Map.class)
      Map<String, ?> parameters)

      Read the content of this URL and returns it as a byte[]. The default connection parameters can be modified by adding keys to the parameters map:

      - connectTimeout : the connection timeout
      - readTimeout : the read timeout
      - useCaches : set the use cache property for the URL connection
      - allowUserInteraction : set the user interaction flag for the URL connection
      - requestProperties : a map of properties to be passed to the URL connection
      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - URL to read content from
        `parameters` - connection parameters
      Returns:
        the byte[] from that URL
      Since:
        2.4.4

    - #### public static String getExtension(File self)

      Provide the extension of this file.

      Parameters:
        `self` - a file object
      Returns:
        the extension of this file (not including the dot), or an empty string if it doesn't have one.
      Since:
        5.0.0

    - #### public static String getText(File file, String charset)

      Read the content of the File using the specified encoding and return it as a String.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - the file whose content we want to read
        `charset` - the charset used to read the content of the file
      Returns:
        a String containing the content of the file
      Since:
        1.0

    - #### public static String getText(File file)

      Read the content of the File and returns it as a String.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - the file whose content we want to read
      Returns:
        a String containing the content of the file
      Since:
        1.0

    - #### public static String getText(URL url)

      Read the content of this URL and returns it as a String.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - URL to read content from
      Returns:
        the text from that URL
      Since:
        1.0

    - #### public static String getText(URL url, @NamedParam(value = "connectTimeout", type = Integer.class)
      @NamedParam(value = "readTimeout", type = Integer.class)
      @NamedParam(value = "useCaches", type = Boolean.class)
      @NamedParam(value = "allowUserInteraction", type = Boolean.class)
      @NamedParam(value = "requestProperties", type = Map.class)
      Map<String, ?> parameters)

      Read the content of this URL and returns it as a String. The default connection parameters can be modified by adding keys to the parameters map:

      - connectTimeout : the connection timeout
      - readTimeout : the read timeout
      - useCaches : set the use cache property for the URL connection
      - allowUserInteraction : set the user interaction flag for the URL connection
      - requestProperties : a map of properties to be passed to the URL connection
      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - URL to read content from
        `parameters` - connection parameters
      Returns:
        the text from that URL
      Since:
        1.8.1

    - #### public static String getText(URL url, String charset)

      Read the data from this URL and return it as a String. The connection stream is closed before this method returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - URL to read content from
        `charset` - opens the stream with a specified charset
      Returns:
        the text from that URL
      See Also:
        URLConnection.getInputStream
      Since:
        1.0

    - #### public static String getText(URL url, @NamedParam(value = "connectTimeout", type = Integer.class)
      @NamedParam(value = "readTimeout", type = Integer.class)
      @NamedParam(value = "useCaches", type = Boolean.class)
      @NamedParam(value = "allowUserInteraction", type = Boolean.class)
      @NamedParam(value = "requestProperties", type = Map.class)
      Map<String, ?> parameters, String charset)

      Read the data from this URL and return it as a String. The connection stream is closed before this method returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - URL to read content from
        `parameters` - connection parameters
        `charset` - opens the stream with a specified charset
      Returns:
        the text from that URL
      See Also:
        URLConnection.getInputStream
      Since:
        1.8.1

    - #### public static File leftShift(File file, Object text)

      Write the text to the File.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `text` - the text to write to the File
      Returns:
        the original file
      Since:
        1.0

    - #### public static File leftShift(File file, byte[] bytes)

      Write bytes to a File.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `bytes` - the byte array to append to the end of the File
      Returns:
        the original file
      Since:
        1.5.0

    - #### public static File leftShift(File file, InputStream data)

      Append binary data to the file. See append(java.io.File, java.io.InputStream)

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `data` - an InputStream of data to write to the file
      Returns:
        the file
      Since:
        1.5.0

    - #### public static DataInputStream newDataInputStream(File file)

      Create a data input stream for this file

      throws:
        FileNotFoundException if the file is not found.
      Parameters:
        `file` - a File
      Returns:
        a DataInputStream of the file
      Since:
        1.5.0

    - #### public static DataOutputStream newDataOutputStream(File file)

      Creates a new data output stream for this file.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a file object
      Returns:
        the created DataOutputStream
      Since:
        1.5.0

    - #### public static BufferedInputStream newInputStream(File file)

      Creates a buffered input stream for this file.

      throws:
        FileNotFoundException if the file is not found.
      Parameters:
        `file` - a File
      Returns:
        a BufferedInputStream of the file
      Since:
        1.0

    - #### public static BufferedInputStream newInputStream(URL url)

      Creates a buffered input stream for this URL.

      throws:
        IOException if an I/O error occurs while creating the input stream
      Parameters:
        `url` - a URL
      Returns:
        a BufferedInputStream for the URL
      Since:
        1.5.2

    - #### public static BufferedInputStream newInputStream(URL url, @NamedParam(value = "connectTimeout", type = Integer.class)
      @NamedParam(value = "readTimeout", type = Integer.class)
      @NamedParam(value = "useCaches", type = Boolean.class)
      @NamedParam(value = "allowUserInteraction", type = Boolean.class)
      @NamedParam(value = "requestProperties", type = Map.class)
      Map<String, ?> parameters)

      Creates a buffered input stream for this URL. The default connection parameters can be modified by adding keys to the parameters map:

      - connectTimeout : the connection timeout
      - readTimeout : the read timeout
      - useCaches : set the use cache property for the URL connection
      - allowUserInteraction : set the user interaction flag for the URL connection
      - requestProperties : a map of properties to be passed to the URL connection
      throws:
        IOException if an I/O error occurs while creating the input stream
      Parameters:
        `url` - a URL
        `parameters` - connection parameters
      Returns:
        a BufferedInputStream for the URL
      Since:
        1.8.1

    - #### public static ObjectInputStream newObjectInputStream(File file)

      Create an object input stream for this file.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a file
      Returns:
        an object input stream
      Since:
        1.5.0

    - #### public static ObjectInputStream newObjectInputStream(File file, ClassLoader classLoader)

      Create an object input stream for this file using the given class loader.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a file
        `classLoader` - the class loader to use when loading the class
      Returns:
        an object input stream
      Since:
        1.5.0

    - #### public static ObjectOutputStream newObjectOutputStream(File file)

      Create an object output stream for this file.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a file
      Returns:
        an object output stream
      Since:
        1.5.0

    - #### public static BufferedOutputStream newOutputStream(File file)

      Create a buffered output stream for this file.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a file object
      Returns:
        the created OutputStream
      Since:
        1.0

    - #### public static PrintWriter newPrintWriter(File file)

      Create a new PrintWriter for this file.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
      Returns:
        the created PrintWriter
      Since:
        1.0

    - #### public static PrintWriter newPrintWriter(File file, String charset)

      Create a new PrintWriter for this file, using specified charset. If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias), the requisite byte order mark is written to the stream before the writer is returned.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `charset` - the charset
      Returns:
        a PrintWriter
      Since:
        1.0

    - #### public static BufferedReader newReader(File file)

      Create a buffered reader for this file.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
      Returns:
        a BufferedReader
      Since:
        1.0

    - #### public static BufferedReader newReader(File file, String charset)

      Create a buffered reader for this file, using the specified charset as the encoding.

      throws:
        FileNotFoundException if the File was not found
      throws:
        UnsupportedEncodingException if the encoding specified is not supported
      Parameters:
        `file` - a File
        `charset` - the charset for this File
      Returns:
        a BufferedReader
      Since:
        1.0

    - #### public static BufferedReader newReader(URL url)

      Creates a buffered reader for this URL.

      throws:
        MalformedURLException is thrown if the URL is not well-formed
      throws:
        IOException if an I/O error occurs while creating the input stream
      Parameters:
        `url` - a URL
      Returns:
        a BufferedReader for the URL
      Since:
        1.5.5

    - #### public static BufferedReader newReader(URL url, @NamedParam(value = "connectTimeout", type = Integer.class)
      @NamedParam(value = "readTimeout", type = Integer.class)
      @NamedParam(value = "useCaches", type = Boolean.class)
      @NamedParam(value = "allowUserInteraction", type = Boolean.class)
      @NamedParam(value = "requestProperties", type = Map.class)
      Map<String, ?> parameters)

      Creates a buffered reader for this URL. The default connection parameters can be modified by adding keys to the parameters map:

      - connectTimeout : the connection timeout
      - readTimeout : the read timeout
      - useCaches : set the use cache property for the URL connection
      - allowUserInteraction : set the user interaction flag for the URL connection
      - requestProperties : a map of properties to be passed to the URL connection
      throws:
        MalformedURLException is thrown if the URL is not well-formed
      throws:
        IOException if an I/O error occurs while creating the input stream
      Parameters:
        `url` - a URL
        `parameters` - connection parameters
      Returns:
        a BufferedReader for the URL
      Since:
        1.8.1

    - #### public static BufferedReader newReader(URL url, String charset)

      Creates a buffered reader for this URL using the given encoding.

      throws:
        MalformedURLException is thrown if the URL is not well-formed
      throws:
        IOException if an I/O error occurs while creating the input stream
      Parameters:
        `url` - a URL
        `charset` - opens the stream with a specified charset
      Returns:
        a BufferedReader for the URL
      Since:
        1.5.5

    - #### public static BufferedReader newReader(URL url, @NamedParam(value = "connectTimeout", type = Integer.class)
      @NamedParam(value = "readTimeout", type = Integer.class)
      @NamedParam(value = "useCaches", type = Boolean.class)
      @NamedParam(value = "allowUserInteraction", type = Boolean.class)
      @NamedParam(value = "requestProperties", type = Map.class)
      Map<String, ?> parameters, String charset)

      Creates a buffered reader for this URL using the given encoding.

      throws:
        MalformedURLException is thrown if the URL is not well-formed
      throws:
        IOException if an I/O error occurs while creating the input stream
      Parameters:
        `url` - a URL
        `parameters` - connection parameters
        `charset` - opens the stream with a specified charset
      Returns:
        a BufferedReader for the URL
      Since:
        1.8.1

    - #### public static BufferedWriter newWriter(File file)

      Create a buffered writer for this file.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
      Returns:
        a BufferedWriter
      Since:
        1.0

    - #### public static BufferedWriter newWriter(File file, boolean append)

      Creates a buffered writer for this file, optionally appending to the existing file content.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `append` - true if data should be appended to the file
      Returns:
        a BufferedWriter
      Since:
        1.0

    - #### public static BufferedWriter newWriter(File file, String charset, boolean append)

      Helper method to create a buffered writer for a file without writing a BOM.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `charset` - the name of the encoding used to write in this file
        `append` - true if in append mode
      Returns:
        a BufferedWriter
      Since:
        1.0

    - #### public static BufferedWriter newWriter(File file, String charset, boolean append, boolean writeBom)

      Helper method to create a buffered writer for a file. If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias), the requisite byte order mark is written to the stream before the writer is returned.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `charset` - the name of the encoding used to write in this file
        `append` - true if in append mode
        `writeBom` - whether to write a BOM
      Returns:
        a BufferedWriter
      Since:
        2.5.0

    - #### public static BufferedWriter newWriter(File file, String charset)

      Creates a buffered writer for this file, writing data without writing a BOM, using a specified encoding.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `charset` - the name of the encoding used to write in this file
      Returns:
        a BufferedWriter
      Since:
        1.0

    - #### public static byte[] readBytes(File file)

      Reads the content of the file into a byte array.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
      Returns:
        a byte array with the contents of the file.
      Since:
        1.0

    - #### public static List<String> readLines(File file)

      Reads the file into a list of Strings, with one item for each line.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
      Returns:
        a List of lines
      See Also:
        IOGroovyMethods.readLines
      Since:
        1.0

    - #### public static List<String> readLines(File file, String charset)

      Reads the file into a list of Strings, with one item for each line.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `charset` - opens the file with a specified charset
      Returns:
        a List of lines
      See Also:
        IOGroovyMethods.readLines
      Since:
        1.6.8

    - #### public static List<String> readLines(URL self)

      Reads the URL contents into a list, with one element for each line.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - a URL
      Returns:
        a List of lines
      See Also:
        IOGroovyMethods.readLines
      Since:
        1.6.8

    - #### public static List<String> readLines(URL self, String charset)

      Reads the URL contents into a list, with one element for each line.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - a URL
        `charset` - opens the URL with a specified charset
      Returns:
        a List of lines
      See Also:
        IOGroovyMethods.readLines
      Since:
        1.6.8

    - #### public static String relativePath(File self, File to)

      Relative path to file.

      Parameters:
        `self` - the `File` to calculate the path from
        `to` - the `File` to calculate the path to
      Returns:
        the relative path between the files

    - #### public static boolean renameTo(File self, String newPathName)

      Renames the file. It's a shortcut for File.renameTo

      Parameters:
        `self` - a File
        `newPathName` - The new pathname for the named file
      Returns:
        `true` if and only if the renaming succeeded; `false` otherwise
      Since:
        1.7.4

    - #### public static void setBytes(File file, byte[] bytes)

      Write the bytes from the byte array to the File.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - the file to write to
        `bytes` - the byte[] to write to the file
      Since:
        1.7.1

    - #### public static void setText(File file, String text)

      Synonym for write(text) allowing file.text = 'foo'.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `text` - the text to write to the File
      See Also:
        write(java.io.File, java.lang.String)
      Since:
        1.5.1

    - #### public static void setText(File file, String text, String charset)

      Synonym for write(text, charset) allowing:

           myFile.setText('some text', charset)

      or with some help from `ExpandoMetaClass`, you could do something like:

           myFile.metaClass.setText = { String s -> delegate.setText(s, 'UTF-8') }
           myfile.text = 'some text'

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - A File
        `charset` - The charset used when writing to the file
        `text` - The text to write to the File
      See Also:
        write(java.io.File, java.lang.String, java.lang.String)
      Since:
        1.7.3

    - #### public static long size(File self)

      Provide the standard Groovy `size()` method for `File`.

      Parameters:
        `self` - a file object
      Returns:
        the file's size (length)
      Since:
        1.5.0

    - #### <T> public static T splitEachLine(File self, String regex, @ClosureParams(value = FromString.class, options = {"List", "String[]"}, conflictResolutionStrategy = PickFirstResolver.class)
      Closure<T> closure)

      Iterates through this file line by line, splitting each line using the given regex separator. For each line, the given closure is called with a single parameter being the list of strings computed by splitting the line around matches of the given regular expression. Finally the resources used for processing the file are closed.

      throws:
        IOException if an IOException occurs.
      throws:
        java.util.regex.PatternSyntaxException if the regular expression's syntax is invalid
      Parameters:
        `self` - a File
        `regex` - the delimiting regular expression
        `closure` - a closure
      Returns:
        the last value returned by the closure
      See Also:
        IOGroovyMethods.splitEachLine
      Since:
        1.5.5

    - #### <T> public static T splitEachLine(File self, Pattern pattern, @ClosureParams(value = FromString.class, options = {"List", "String[]"}, conflictResolutionStrategy = PickFirstResolver.class)
      Closure<T> closure)

      Iterates through this file line by line, splitting each line using the given separator Pattern. For each line, the given closure is called with a single parameter being the list of strings computed by splitting the line around matches of the given regular expression Pattern. Finally the resources used for processing the file are closed.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - a File
        `pattern` - the regular expression Pattern for the delimiter
        `closure` - a closure
      Returns:
        the last value returned by the closure
      See Also:
        IOGroovyMethods.splitEachLine
      Since:
        1.6.8

    - #### <T> public static T splitEachLine(File self, String regex, String charset, @ClosureParams(value = FromString.class, options = {"List", "String[]"}, conflictResolutionStrategy = PickFirstResolver.class)
      Closure<T> closure)

      Iterates through this file line by line, splitting each line using the given regex separator. For each line, the given closure is called with a single parameter being the list of strings computed by splitting the line around matches of the given regular expression. Finally the resources used for processing the file are closed.

      throws:
        IOException if an IOException occurs.
      throws:
        java.util.regex.PatternSyntaxException if the regular expression's syntax is invalid
      Parameters:
        `self` - a File
        `regex` - the delimiting regular expression
        `charset` - opens the file with a specified charset
        `closure` - a closure
      Returns:
        the last value returned by the closure
      See Also:
        IOGroovyMethods.splitEachLine
      Since:
        1.6.8

    - #### <T> public static T splitEachLine(File self, Pattern pattern, String charset, @ClosureParams(value = FromString.class, options = {"List", "String[]"}, conflictResolutionStrategy = PickFirstResolver.class)
      Closure<T> closure)

      Iterates through this file line by line, splitting each line using the given regex separator Pattern. For each line, the given closure is called with a single parameter being the list of strings computed by splitting the line around matches of the given regular expression. Finally the resources used for processing the file are closed.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - a File
        `pattern` - the regular expression Pattern for the delimiter
        `charset` - opens the file with a specified charset
        `closure` - a closure
      Returns:
        the last value returned by the closure
      See Also:
        IOGroovyMethods.splitEachLine
      Since:
        1.6.8

    - #### <T> public static T splitEachLine(URL self, String regex, @ClosureParams(value = FromString.class, options = {"List", "String[]"}, conflictResolutionStrategy = PickFirstResolver.class)
      Closure<T> closure)

      Iterates through the input stream associated with this URL line by line, splitting each line using the given regex separator. For each line, the given closure is called with a single parameter being the list of strings computed by splitting the line around matches of the given regular expression. Finally the resources used for processing the URL are closed.

      throws:
        IOException if an IOException occurs.
      throws:
        java.util.regex.PatternSyntaxException if the regular expression's syntax is invalid
      Parameters:
        `self` - a URL to open and read
        `regex` - the delimiting regular expression
        `closure` - a closure
      Returns:
        the last value returned by the closure
      See Also:
        IOGroovyMethods.splitEachLine
      Since:
        1.6.8

    - #### <T> public static T splitEachLine(URL self, Pattern pattern, @ClosureParams(value = FromString.class, options = {"List", "String[]"}, conflictResolutionStrategy = PickFirstResolver.class)
      Closure<T> closure)

      Iterates through the input stream associated with this URL line by line, splitting each line using the given regex separator Pattern. For each line, the given closure is called with a single parameter being the list of strings computed by splitting the line around matches of the given regular expression. Finally the resources used for processing the URL are closed.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - a URL to open and read
        `pattern` - the regular expression Pattern for the delimiter
        `closure` - a closure
      Returns:
        the last value returned by the closure
      See Also:
        IOGroovyMethods.splitEachLine
      Since:
        1.6.8

    - #### <T> public static T splitEachLine(URL self, String regex, String charset, @ClosureParams(value = FromString.class, options = {"List", "String[]"}, conflictResolutionStrategy = PickFirstResolver.class)
      Closure<T> closure)

      Iterates through the input stream associated with this URL line by line, splitting each line using the given regex separator. For each line, the given closure is called with a single parameter being the list of strings computed by splitting the line around matches of the given regular expression. Finally the resources used for processing the URL are closed.

      throws:
        IOException if an IOException occurs.
      throws:
        java.util.regex.PatternSyntaxException if the regular expression's syntax is invalid
      Parameters:
        `self` - a URL to open and read
        `regex` - the delimiting regular expression
        `charset` - opens the file with a specified charset
        `closure` - a closure
      Returns:
        the last value returned by the closure
      See Also:
        IOGroovyMethods.splitEachLine
      Since:
        1.6.8

    - #### <T> public static T splitEachLine(URL self, Pattern pattern, String charset, @ClosureParams(value = FromString.class, options = {"List", "String[]"}, conflictResolutionStrategy = PickFirstResolver.class)
      Closure<T> closure)

      Iterates through the input stream associated with this URL line by line, splitting each line using the given regex separator Pattern. For each line, the given closure is called with a single parameter being the list of strings computed by splitting the line around matches of the given regular expression. Finally the resources used for processing the URL are closed.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `self` - a URL to open and read
        `pattern` - the regular expression Pattern for the delimiter
        `charset` - opens the file with a specified charset
        `closure` - a closure
      Returns:
        the last value returned by the closure
      See Also:
        IOGroovyMethods.splitEachLine
      Since:
        1.6.8

    - #### public static URI toURI(CharSequence self)

      Transforms a CharSequence representing a URI into a URI object.

      throws:
        java.net.URISyntaxException is thrown if the URI is not well-formed.
      Parameters:
        `self` - the CharSequence representing a URI
      Returns:
        a URI
      Since:
        1.8.2

    - #### public static URI toURI(String self)

      Transforms a String representing a URI into a URI object.

      throws:
        java.net.URISyntaxException is thrown if the URI is not well-formed.
      Parameters:
        `self` - the String representing a URI
      Returns:
        a URI
      Since:
        1.0

    - #### public static URL toURL(CharSequence self)

      Transforms a CharSequence representing a URL into a URL object.

      throws:
        java.net.MalformedURLException is thrown if the URL is not well-formed.
      Parameters:
        `self` - the CharSequence representing a URL
      Returns:
        a URL
      Since:
        1.8.2

    - #### public static URL toURL(String self)

      Transforms a String representing a URL into a URL object.

      throws:
        java.net.MalformedURLException is thrown if the URL is not well-formed.
      Parameters:
        `self` - the String representing a URL
      Returns:
        a URL
      Since:
        1.0

    - #### public static void traverse(File self, @NamedParam(value = "type", type = FileType.class)
      @NamedParam(value = "preDir", type = Closure.class)
      @NamedParam(value = "preRoot", type = Boolean.class)
      @NamedParam(value = "postDir", type = Closure.class)
      @NamedParam(value = "postRoot", type = Boolean.class)
      @NamedParam(value = "visitRoot", type = Boolean.class)
      @NamedParam(value = "maxDepth", type = Integer.class)
      @NamedParam(value = "filter")
      @NamedParam(value = "nameFilter")
      @NamedParam(value = "excludeFilter")
      @NamedParam(value = "excludeNameFilter")
      @NamedParam(value = "sort", type = Closure.class)
      Map<String, ?> options, @ClosureParams(value = SimpleType.class, options = "java.io.File")
      Closure closure)

      Processes each descendant file in this directory and any subdirectories. Processing consists of potentially calling `closure` passing it the current file (which may be a normal file or subdirectory) and then if a subdirectory was encountered, recursively processing the subdirectory.

      The traversal can be adapted by providing various options in the `options` Map according to the following keys:

      type
        A FileType enum to determine if normal files or directories or both are processed
      preDir
        A Closure run before each directory is processed and optionally returning a FileVisitResult value which can be used to control subsequent processing.
      preRoot
        A boolean indicating that the 'preDir' closure should be applied at the root level
      postDir
        A Closure run after each directory is processed and optionally returning a FileVisitResult value which can be used to control subsequent processing. Particularly useful when strict depth-first traversal is required.
      postRoot
        A boolean indicating that the 'postDir' closure should be applied at the root level
      visitRoot
        A boolean indicating that the given closure should be applied for the root dir (not applicable if the 'type' is set to FileType.FILES)
      maxDepth
        The maximum number of directory levels when recursing (default is -1 which means infinite, set to 0 for no recursion)
      filter
        A filter to perform on traversed files/directories (using the DefaultGroovyMethods.isCase method). If set, only files/dirs which match are candidates for visiting.
      nameFilter
        A filter to perform on the name of traversed files/directories (using the DefaultGroovyMethods.isCase method). If set, only files/dirs which match are candidates for visiting. (Must not be set if 'filter' is set)
      excludeFilter
        A filter to perform on traversed files/directories (using the DefaultGroovyMethods.isCase method). If set, any candidates which match won't be visited.
      excludeNameFilter
        A filter to perform on the names of traversed files/directories (using the DefaultGroovyMethods.isCase method). If set, any candidates which match won't be visited. (Must not be set if 'excludeFilter' is set)
      sort
        A Closure which if set causes the files and subdirectories for each directory to be processed in sorted order. Note that even when processing only files, the order of visited subdirectories will be affected by this parameter.
      This example prints out file counts and size aggregates for groovy source files within a directory tree:

           def totalSize = 0
           def count = 0
           def sortByTypeThenName = { a, b ->
               a.isFile() != b.isFile() ? a.isFile() <=> b.isFile() : a.name <=> b.name
           }
           rootDir.traverse(
                   type         : FILES,
                   nameFilter   : ~/.*\.groovy/,
                   preDir       : { if (it.name == '.svn') return SKIP_SUBTREE },
                   postDir      : { println "Found $count files in $it.name totalling $totalSize bytes"
                                   totalSize = 0; count = 0 },
                   postRoot     : true
                   sort         : sortByTypeThenName
           ) {it -> totalSize += it.size(); count++ }

      throws:
        FileNotFoundException if the given directory does not exist
      throws:
        IllegalArgumentException if the provided File object does not represent a directory or illegal filter combinations are supplied
      Parameters:
        `self` - a File (that happens to be a folder/directory)
        `options` - a Map of options to alter the traversal behavior
        `closure` - the Closure to invoke on each file/directory and optionally returning a FileVisitResult value which can be used to control subsequent processing
      See Also:
        DefaultGroovyMethods.sort
        FileVisitResult
        FileType
      Since:
        1.7.1

    - #### public static void traverse(File self, @ClosureParams(value = SimpleType.class, options = "java.io.File")
      Closure closure)

      Processes each descendant file in this directory and any subdirectories. Convenience method for traverse(java.io.File, java.util.Map, groovy.lang.Closure) when no options to alter the traversal behavior are required.

      throws:
        FileNotFoundException if the given directory does not exist
      throws:
        IllegalArgumentException if the provided File object does not represent a directory
      Parameters:
        `self` - a File (that happens to be a folder/directory)
        `closure` - the Closure to invoke on each file/directory and optionally returning a FileVisitResult value which can be used to control subsequent processing
      See Also:
        traverse(java.io.File, java.util.Map, groovy.lang.Closure)
      Since:
        1.7.1

    - #### public static void traverse(File self, @NamedParam(value = "type", type = FileType.class)
      @NamedParam(value = "preDir", type = Closure.class)
      @NamedParam(value = "preRoot", type = Boolean.class)
      @NamedParam(value = "postDir", type = Closure.class)
      @NamedParam(value = "postRoot", type = Boolean.class)
      @NamedParam(value = "visitRoot", type = Boolean.class)
      @NamedParam(value = "maxDepth", type = Integer.class)
      @NamedParam(value = "filter")
      @NamedParam(value = "nameFilter")
      @NamedParam(value = "excludeFilter")
      @NamedParam(value = "excludeNameFilter")
      @NamedParam(value = "sort", type = Closure.class)
      Map<String, ?> options)

      Invokes the closure specified with key 'visit' in the options Map for each descendant file in this directory tree. Convenience method for traverse(java.io.File, java.util.Map, groovy.lang.Closure) allowing the 'visit' closure to be included in the options Map rather than as a parameter.

      throws:
        FileNotFoundException if the given directory does not exist
      throws:
        IllegalArgumentException if the provided File object does not represent a directory or illegal filter combinations are supplied
      Parameters:
        `self` - a File (that happens to be a folder/directory)
        `options` - a Map of options to alter the traversal behavior
      See Also:
        traverse(java.io.File, java.util.Map, groovy.lang.Closure)
      Since:
        1.7.1

    - #### <T> public static T withDataInputStream(File file, @ClosureParams(value = SimpleType.class, options = "java.io.DataInputStream")
      Closure<T> closure)

      Create a new DataInputStream for this file and passes it into the closure. This method ensures the stream is closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `closure` - a closure
      Returns:
        the value returned by the closure
      See Also:
        IOGroovyMethods.withStream
      Since:
        1.5.2

    - #### <T> public static T withDataOutputStream(File file, @ClosureParams(value = SimpleType.class, options = "java.io.DataOutputStream")
      Closure<T> closure)

      Create a new DataOutputStream for this file and passes it into the closure. This method ensures the stream is closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `closure` - a closure
      Returns:
        the value returned by the closure
      See Also:
        IOGroovyMethods.withStream
      Since:
        1.5.2

    - #### public static Object withInputStream(File file, @ClosureParams(value = SimpleType.class, options = "java.io.InputStream")
      Closure closure)

      Create a new InputStream for this file and passes it into the closure. This method ensures the stream is closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `closure` - a closure
      Returns:
        the value returned by the closure
      See Also:
        IOGroovyMethods.withStream
      Since:
        1.5.2

    - #### <T> public static T withInputStream(URL url, @ClosureParams(value = SimpleType.class, options = "java.io.InputStream")
      Closure<T> closure)

      Creates a new InputStream for this URL and passes it into the closure. This method ensures the stream is closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - a URL
        `closure` - a closure
      Returns:
        the value returned by the closure
      See Also:
        IOGroovyMethods.withStream
      Since:
        1.5.2

    - #### <T> public static T withObjectInputStream(File file, @ClosureParams(value = SimpleType.class, options = "java.io.ObjectInputStream")
      Closure<T> closure)

      Create a new ObjectInputStream for this file and pass it to the closure. This method ensures the stream is closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `closure` - a closure
      Returns:
        the value returned by the closure
      See Also:
        IOGroovyMethods.withStream
      Since:
        1.5.2

    - #### <T> public static T withObjectInputStream(File file, ClassLoader classLoader, @ClosureParams(value = SimpleType.class, options = "java.io.ObjectInputStream")
      Closure<T> closure)

      Create a new ObjectInputStream for this file associated with the given class loader and pass it to the closure. This method ensures the stream is closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `classLoader` - the class loader to use when loading the class
        `closure` - a closure
      Returns:
        the value returned by the closure
      See Also:
        IOGroovyMethods.withStream
      Since:
        1.5.2

    - #### <T> public static T withObjectOutputStream(File file, @ClosureParams(value = SimpleType.class, options = "java.io.ObjectOutputStream")
      Closure<T> closure)

      Create a new ObjectOutputStream for this file and then pass it to the closure. This method ensures the stream is closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `closure` - a closure
      Returns:
        the value returned by the closure
      See Also:
        IOGroovyMethods.withStream
      Since:
        1.5.0

    - #### public static Object withOutputStream(File file, @ClosureParams(value = SimpleType.class, options = "java.io.OutputStream")
      Closure closure)

      Creates a new OutputStream for this file and passes it into the closure. This method ensures the stream is closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `closure` - a closure
      Returns:
        the value returned by the closure
      See Also:
        IOGroovyMethods.withStream
      Since:
        1.5.2

    - #### <T> public static T withPrintWriter(File file, @ClosureParams(value = SimpleType.class, options = "java.io.PrintWriter")
      Closure<T> closure)

      Create a new PrintWriter for this file which is then passed it into the given closure. This method ensures the writer is closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `closure` - the closure to invoke with the PrintWriter
      Returns:
        the value returned by the closure
      Since:
        1.5.2

    - #### <T> public static T withPrintWriter(File file, String charset, @ClosureParams(value = SimpleType.class, options = "java.io.PrintWriter")
      Closure<T> closure)

      Create a new PrintWriter with a specified charset for this file. If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias), the requisite byte order mark is written to the stream when the writer is created. The writer is passed to the closure, and will be closed before this method returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `charset` - the charset
        `closure` - the closure to invoke with the PrintWriter
      Returns:
        the value returned by the closure
      Since:
        1.5.2

    - #### <T> public static T withReader(File file, @ClosureParams(value = SimpleType.class, options = "java.io.BufferedReader")
      Closure<T> closure)

      Create a new BufferedReader for this file and then passes it into the closure, ensuring the reader is closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a file object
        `closure` - a closure
      Returns:
        the value returned by the closure
      Since:
        1.5.2

    - #### <T> public static T withReader(File file, String charset, @ClosureParams(value = SimpleType.class, options = "java.io.BufferedReader")
      Closure<T> closure)

      Create a new BufferedReader for this file using the specified charset and then passes it into the closure, ensuring the reader is closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a file object
        `charset` - the charset for this input stream
        `closure` - a closure
      Returns:
        the value returned by the closure
      Since:
        1.6.0

    - #### <T> public static T withReader(URL url, @ClosureParams(value = SimpleType.class, options = "java.io.Reader")
      Closure<T> closure)

      Helper method to create a new BufferedReader for a URL and then passes it to the closure. The reader is closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - a URL
        `closure` - the closure to invoke with the reader
      Returns:
        the value returned by the closure
      Since:
        1.5.2

    - #### <T> public static T withReader(URL url, String charset, @ClosureParams(value = SimpleType.class, options = "java.io.Reader")
      Closure<T> closure)

      Helper method to create a new Reader for a URL and then passes it to the closure. The reader is closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `url` - a URL
        `charset` - the charset used
        `closure` - the closure to invoke with the reader
      Returns:
        the value returned by the closure
      Since:
        1.5.6

    - #### <T> public static T withWriter(File file, @ClosureParams(value = SimpleType.class, options = "java.io.BufferedWriter")
      Closure<T> closure)

      Creates a new BufferedWriter for this file, passes it to the closure, and ensures the stream is flushed and closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `closure` - a closure
      Returns:
        the value returned by the closure
      Since:
        1.5.2

    - #### <T> public static T withWriter(File file, String charset, @ClosureParams(value = SimpleType.class, options = "java.io.BufferedWriter")
      Closure<T> closure)

      Creates a new BufferedWriter for this file, passes it to the closure, and ensures the stream is flushed and closed after the closure returns. The writer will use the given charset encoding. If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias), the requisite byte order mark is written to the stream when the writer is created.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `charset` - the charset used
        `closure` - a closure
      Returns:
        the value returned by the closure
      Since:
        1.5.2

    - #### <T> public static T withWriterAppend(File file, String charset, @ClosureParams(value = SimpleType.class, options = "java.io.BufferedWriter")
      Closure<T> closure)

      Create a new BufferedWriter which will append to this file. If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias), the requisite byte order mark is written to the stream when the writer is created. The writer is passed to the closure and will be closed before this method returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `charset` - the charset used
        `closure` - a closure
      Returns:
        the value returned by the closure
      Since:
        1.5.2

    - #### <T> public static T withWriterAppend(File file, @ClosureParams(value = SimpleType.class, options = "java.io.BufferedWriter")
      Closure<T> closure)

      Create a new BufferedWriter for this file in append mode. The writer is passed to the closure and is closed after the closure returns.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `closure` - a closure
      Returns:
        the value returned by the closure
      Since:
        1.5.2

    - #### public static void write(File file, String text)

      Write the text to the File without writing a BOM.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `text` - the text to write to the File
      Since:
        1.0

    - #### public static void write(File file, String text, boolean writeBom)

      Write the text to the File. If the default charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias) and `writeBom` is `true`, the requisite byte order mark is written to the file before the text.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `text` - the text to write to the File
        `writeBom` - whether to write a BOM
      Since:
        2.5.0

    - #### public static void write(File file, String text, String charset)

      Write the text to the File without writing a BOM, using the specified encoding.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `text` - the text to write to the File
        `charset` - the charset used
      Since:
        1.0

    - #### public static void write(File file, String text, String charset, boolean writeBom)

      Write the text to the File, using the specified encoding. If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias) and `writeBom` is `true`, the requisite byte order mark is written to the file before the text.

      throws:
        IOException if an IOException occurs.
      Parameters:
        `file` - a File
        `text` - the text to write to the File
        `charset` - the charset used
        `writeBom` - whether to write a BOM
      Since:
        2.5.0