Package org.apache.commons.io

# Class FileUtils

java.lang.Object
org.apache.commons.io.FileUtils

public class FileUtils extends Object
General file manipulation utilities.

Facilities are provided in the following areas:

- writing to a file
- reading from a file
- make a directory including parent directories
- copying files and directories
- deleting files and directories
- converting to and from a URL
- listing files and directories by filter and extension
- comparing file content
- file last changed date
- calculating a checksum

Note that a specific charset should be specified whenever possible. Relying on the platform default means that the code is Locale-dependent. Only use the default if the files are known to always use the platform default.

`SecurityException` are not documented in the Javadoc.

Provenance: Excalibur, Alexandria, Commons-Utils

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final File[]`
  `EMPTY_FILE_ARRAY`
  An empty array of type `File`.
  `static final long`
  `ONE_EB`
  The number of bytes in an exabyte.
  `static final BigInteger`
  `ONE_EB_BI`
  The number of bytes in an exabyte.
  `static final long`
  `ONE_GB`
  The number of bytes in a gigabyte.
  `static final BigInteger`
  `ONE_GB_BI`
  The number of bytes in a gigabyte.
  `static final long`
  `ONE_KB`
  The number of bytes in a kilobyte.
  `static final BigInteger`
  `ONE_KB_BI`
  The number of bytes in a kilobyte.
  `static final long`
  `ONE_MB`
  The number of bytes in a megabyte.
  `static final BigInteger`
  `ONE_MB_BI`
  The number of bytes in a megabyte.
  `static final long`
  `ONE_PB`
  The number of bytes in a petabyte.
  `static final BigInteger`
  `ONE_PB_BI`
  The number of bytes in a petabyte.
  `static final long`
  `ONE_TB`
  The number of bytes in a terabyte.
  `static final BigInteger`
  `ONE_TB_BI`
  The number of bytes in a terabyte.
  `static final BigInteger`
  `ONE_YB`
  The number of bytes in a yottabyte.
  `static final BigInteger`
  `ONE_ZB`
  The number of bytes in a zettabyte.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `FileUtils()`
  Deprecated.
  TODO Make private in 3.0.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static String`
  `byteCountToDisplaySize(long size)`
  Returns a human-readable version of the file size, where the input represents a specific number of bytes.
  `static String`
  `byteCountToDisplaySize(Number size)`
  Returns a human-readable version of the file size, where the input represents a specific number of bytes.
  `static String`
  `byteCountToDisplaySize(BigInteger size)`
  Returns a human-readable version of the file size, where the input represents a specific number of bytes.
  `static Checksum`
  `checksum(File file, Checksum checksum)`
  Computes the checksum of a file using the specified checksum object.
  `static long`
  `checksumCRC32(File file)`
  Computes the checksum of a file using the CRC32 checksum routine.
  `static void`
  `cleanDirectory(File directory)`
  Cleans a directory without deleting it.
  `static boolean`
  `contentEquals(File file1, File file2)`
  Tests whether the contents of two files are equal.
  `static boolean`
  `contentEqualsIgnoreEOL(File file1, File file2, String charsetName)`
  Compares the contents of two files to determine if they are equal or not.
  `static File[]`
  `convertFileCollectionToFileArray(Collection<File> files)`
  Converts a Collection containing `File` instances into array representation.
  `static void`
  `copyDirectory(File srcDir, File destDir)`
  Copies a whole directory to a new location, preserving the file dates.
  `static void`
  `copyDirectory(File srcDir, File destDir, boolean preserveFileDate)`
  Copies a whole directory to a new location.
  `static void`
  `copyDirectory(File srcDir, File destDir, FileFilter filter)`
  Copies a filtered directory to a new location preserving the file dates.
  `static void`
  `copyDirectory(File srcDir, File destDir, FileFilter filter, boolean preserveFileDate)`
  Copies a filtered directory to a new location.
  `static void`
  `copyDirectory(File srcDir, File destDir, FileFilter fileFilter, boolean preserveFileDate, CopyOption... copyOptions)`
  Copies a filtered directory to a new location.
  `static void`
  `copyDirectoryToDirectory(File sourceDir, File destinationDir)`
  Copies a directory to within another directory preserving the file dates.
  `static void`
  `copyFile(File srcFile, File destFile)`
  Copies a file to a new location preserving the file date.
  `static void`
  `copyFile(File srcFile, File destFile, boolean preserveFileDate)`
  Copies an existing file to a new file location.
  `static void`
  `copyFile(File srcFile, File destFile, boolean preserveFileDate, CopyOption... copyOptions)`
  Copies the contents of a file to a new location.
  `static void`
  `copyFile(File srcFile, File destFile, CopyOption... copyOptions)`
  Copies a file to a new location.
  `static long`
  `copyFile(File input, OutputStream output)`
  Copies bytes from a `File` to an `OutputStream`.
  `static void`
  `copyFileToDirectory(File srcFile, File destDir)`
  Copies a file to a directory preserving the file date.
  `static void`
  `copyFileToDirectory(File sourceFile, File destinationDir, boolean preserveFileDate)`
  Copies a file to a directory optionally preserving the file date.
  `static void`
  `copyInputStreamToFile(InputStream source, File destination)`
  Copies bytes from an `InputStream` `source` to a file `destination`.
  `static void`
  `copyToDirectory(File sourceFile, File destinationDir)`
  Copies a file or directory to within another directory preserving the file dates.
  `static void`
  `copyToDirectory(Iterable<File> sourceIterable, File destinationDir)`
  Copies a files to a directory preserving each file's date.
  `static void`
  `copyToFile(InputStream inputStream, File file)`
  Copies bytes from an `InputStream` source to a `File` destination.
  `static void`
  `copyURLToFile(URL source, File destination)`
  Copies bytes from the URL `source` to a file `destination`.
  `static void`
  `copyURLToFile(URL source, File destination, int connectionTimeoutMillis, int readTimeoutMillis)`
  Copies bytes from the URL `source` to a file `destination`.
  `static File`
  `createParentDirectories(File file)`
  Creates all parent directories for a File object, including any necessary but non-existent parent directories.
  `static File`
  `current()`
  Gets the current directory.
  `static File`
  `delete(File file)`
  Deletes the given File but throws an IOException if it cannot, unlike `File.delete()` which returns a boolean.
  `static void`
  `deleteDirectory(File directory)`
  Deletes a directory recursively.
  `static boolean`
  `deleteQuietly(File file)`
  Deletes a file, never throwing an exception.
  `static boolean`
  `directoryContains(File directory, File child)`
  Determines whether the `parent` directory contains the `child` element (a file or directory).
  `static void`
  `forceDelete(File file)`
  Deletes a file or directory.
  `static void`
  `forceDeleteOnExit(File file)`
  Schedules a file to be deleted when JVM exits.
  `static void`
  `forceMkdir(File directory)`
  Creates all directories for a File object, including any necessary but non-existent parent directories.
  `static void`
  `forceMkdirParent(File file)`
  Creates all directories for a File object, including any necessary but non-existent parent directories.
  `static File`
  `getFile(File directory, String... names)`
  Constructs a file from the set of name elements.
  `static File`
  `getFile(String... names)`
  Constructs a file from the set of name elements.
  `static File`
  `getTempDirectory()`
  Returns a `File` representing the system temporary directory.
  `static String`
  `getTempDirectoryPath()`
  Returns the path to the system temporary directory.
  `static File`
  `getUserDirectory()`
  Returns a `File` representing the user's home directory.
  `static String`
  `getUserDirectoryPath()`
  Returns the path to the user's home directory.
  `static boolean`
  `isDirectory(File file, LinkOption... options)`
  Tests whether the specified `File` is a directory or not.
  `static boolean`
  `isEmptyDirectory(File directory)`
  Tests whether the directory is empty.
  `static boolean`
  `isFileNewer(File file, long timeMillis)`
  Tests if the specified `File` is newer than the specified time reference.
  `static boolean`
  `isFileNewer(File file, File reference)`
  Tests if the specified `File` is newer than the reference `File`.
  `static boolean`
  `isFileNewer(File file, FileTime fileTime)`
  Tests if the specified `File` is newer than the specified `FileTime`.
  `static boolean`
  `isFileNewer(File file, ChronoLocalDate chronoLocalDate)`
  Tests if the specified `File` is newer than the specified `ChronoLocalDate` at the end of day.
  `static boolean`
  `isFileNewer(File file, ChronoLocalDate chronoLocalDate, LocalTime localTime)`
  Tests if the specified `File` is newer than the specified `ChronoLocalDate` at the specified time.
  `static boolean`
  `isFileNewer(File file, ChronoLocalDate chronoLocalDate, OffsetTime offsetTime)`
  Tests if the specified `File` is newer than the specified `ChronoLocalDate` at the specified `OffsetTime`.
  `static boolean`
  `isFileNewer(File file, ChronoLocalDateTime<?> chronoLocalDateTime)`
  Tests if the specified `File` is newer than the specified `ChronoLocalDateTime` at the system-default time zone.
  `static boolean`
  `isFileNewer(File file, ChronoLocalDateTime<?> chronoLocalDateTime, ZoneId zoneId)`
  Tests if the specified `File` is newer than the specified `ChronoLocalDateTime` at the specified `ZoneId`.
  `static boolean`
  `isFileNewer(File file, ChronoZonedDateTime<?> chronoZonedDateTime)`
  Tests if the specified `File` is newer than the specified `ChronoZonedDateTime`.
  `static boolean`
  `isFileNewer(File file, Instant instant)`
  Tests if the specified `File` is newer than the specified `Instant`.
  `static boolean`
  `isFileNewer(File file, OffsetDateTime offsetDateTime)`
  Tests if the specified `File` is newer than the specified `OffsetDateTime`.
  `static boolean`
  `isFileNewer(File file, Date date)`
  Tests if the specified `File` is newer than the specified `Date`.
  `static boolean`
  `isFileOlder(File file, long timeMillis)`
  Tests if the specified `File` is older than the specified time reference.
  `static boolean`
  `isFileOlder(File file, File reference)`
  Tests if the specified `File` is older than the reference `File`.
  `static boolean`
  `isFileOlder(File file, FileTime fileTime)`
  Tests if the specified `File` is older than the specified `FileTime`.
  `static boolean`
  `isFileOlder(File file, ChronoLocalDate chronoLocalDate)`
  Tests if the specified `File` is older than the specified `ChronoLocalDate` at the end of day.
  `static boolean`
  `isFileOlder(File file, ChronoLocalDate chronoLocalDate, LocalTime localTime)`
  Tests if the specified `File` is older than the specified `ChronoLocalDate` at the specified `LocalTime`.
  `static boolean`
  `isFileOlder(File file, ChronoLocalDate chronoLocalDate, OffsetTime offsetTime)`
  Tests if the specified `File` is older than the specified `ChronoLocalDate` at the specified `OffsetTime`.
  `static boolean`
  `isFileOlder(File file, ChronoLocalDateTime<?> chronoLocalDateTime)`
  Tests if the specified `File` is older than the specified `ChronoLocalDateTime` at the system-default time zone.
  `static boolean`
  `isFileOlder(File file, ChronoLocalDateTime<?> chronoLocalDateTime, ZoneId zoneId)`
  Tests if the specified `File` is older than the specified `ChronoLocalDateTime` at the specified `ZoneId`.
  `static boolean`
  `isFileOlder(File file, ChronoZonedDateTime<?> chronoZonedDateTime)`
  Tests if the specified `File` is older than the specified `ChronoZonedDateTime`.
  `static boolean`
  `isFileOlder(File file, Instant instant)`
  Tests if the specified `File` is older than the specified `Instant`.
  `static boolean`
  `isFileOlder(File file, OffsetDateTime offsetDateTime)`
  Tests if the specified `File` is older than the specified `OffsetDateTime`.
  `static boolean`
  `isFileOlder(File file, Date date)`
  Tests if the specified `File` is older than the specified `Date`.
  `static boolean`
  `isRegularFile(File file, LinkOption... options)`
  Tests whether the specified `File` is a regular file or not.
  `static boolean`
  `isSymlink(File file)`
  Tests whether the specified file is a symbolic link rather than an actual file.
  `static Iterator<File>`
  `iterateFiles(File directory, String[] extensions, boolean recursive)`
  Iterates over the files in a given directory (and optionally its subdirectories) which match an array of extensions.
  `static Iterator<File>`
  `iterateFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)`
  Iterates over the files in given directory (and optionally its subdirectories).
  `static Iterator<File>`
  `iterateFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)`
  Iterates over the files in given directory (and optionally its subdirectories).
  `static long`
  `lastModified(File file)`
  Returns the last modification time in milliseconds via `Files.getLastModifiedTime(Path, LinkOption...)`.
  `static FileTime`
  `lastModifiedFileTime(File file)`
  Returns the last modification `FileTime` via `Files.getLastModifiedTime(Path, LinkOption...)`.
  `static long`
  `lastModifiedUnchecked(File file)`
  Returns the last modification time in milliseconds via `Files.getLastModifiedTime(Path, LinkOption...)`.
  `static LineIterator`
  `lineIterator(File file)`
  Returns an Iterator for the lines in a `File` using the default encoding for the VM.
  `static LineIterator`
  `lineIterator(File file, String charsetName)`
  Returns an Iterator for the lines in a `File`.
  `static Collection<File>`
  `listFiles(File directory, String[] extensions, boolean recursive)`
  Lists files within a given directory (and optionally its subdirectories) which match an array of extensions.
  `static Collection<File>`
  `listFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)`
  Finds files within a given directory (and optionally its subdirectories).
  `static Collection<File>`
  `listFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)`
  Finds files within a given directory (and optionally its subdirectories).
  `static void`
  `moveDirectory(File srcDir, File destDir)`
  Moves a directory.
  `static void`
  `moveDirectoryToDirectory(File source, File destDir, boolean createDestDir)`
  Moves a directory to another directory.
  `static void`
  `moveFile(File srcFile, File destFile)`
  Moves a file preserving attributes.
  `static void`
  `moveFile(File srcFile, File destFile, CopyOption... copyOptions)`
  Moves a file.
  `static void`
  `moveFileToDirectory(File srcFile, File destDir, boolean createDestDir)`
  Moves a file into a directory.
  `static void`
  `moveToDirectory(File src, File destDir, boolean createDestDir)`
  Moves a file or directory into a destination directory.
  `static OutputStream`
  `newOutputStream(File file, boolean append)`
  Creates a new OutputStream by opening or creating a file, returning an output stream that may be used to write bytes to the file.
  `static FileInputStream`
  `openInputStream(File file)`
  Opens a `FileInputStream` for the specified file, providing better error messages than simply calling `new FileInputStream(file)`.
  `static FileOutputStream`
  `openOutputStream(File file)`
  Opens a `FileOutputStream` for the specified file, checking and creating the parent directory if it does not exist.
  `static FileOutputStream`
  `openOutputStream(File file, boolean append)`
  Opens a `FileOutputStream` for the specified file, checking and creating the parent directory if it does not exist.
  `static byte[]`
  `readFileToByteArray(File file)`
  Reads the contents of a file into a byte array.
  `static String`
  `readFileToString(File file)`
  Deprecated.
  Use `readFileToString(File, Charset)` instead (and specify the appropriate encoding)
  `static String`
  `readFileToString(File file, String charsetName)`
  Reads the contents of a file into a String.
  `static String`
  `readFileToString(File file, Charset charsetName)`
  Reads the contents of a file into a String.
  `static List<String>`
  `readLines(File file)`
  Deprecated.
  Use `readLines(File, Charset)` instead (and specify the appropriate encoding)
  `static List<String>`
  `readLines(File file, String charsetName)`
  Reads the contents of a file line by line to a List of Strings.
  `static List<String>`
  `readLines(File file, Charset charset)`
  Reads the contents of a file line by line to a List of Strings.
  `static long`
  `sizeOf(File file)`
  Returns the size of the specified file or directory.
  `static BigInteger`
  `sizeOfAsBigInteger(File file)`
  Returns the size of the specified file or directory.
  `static long`
  `sizeOfDirectory(File directory)`
  Counts the size of a directory recursively (sum of the length of all files).
  `static BigInteger`
  `sizeOfDirectoryAsBigInteger(File directory)`
  Counts the size of a directory recursively (sum of the length of all files).
  `static Stream<File>`
  `streamFiles(File directory, boolean recursive, String... extensions)`
  Streams over the files in a given directory (and optionally its subdirectories) which match an array of extensions.
  `static File`
  `toFile(URL url)`
  Converts from a `URL` to a `File`.
  `static File[]`
  `toFiles(URL... urls)`
  Converts each of an array of `URL` to a `File`.
  `static void`
  `touch(File file)`
  Implements behavior similar to the UNIX "touch" utility.
  `static URL[]`
  `toURLs(File... files)`
  Converts each element of an array of `File` to a `URL`.
  `static boolean`
  `waitFor(File file, int seconds)`
  Waits for the file system to detect a file's presence, with a timeout.
  `static void`
  `write(File file, CharSequence data)`
  Deprecated.
  Use `write(File, CharSequence, Charset)` instead (and specify the appropriate encoding)
  `static void`
  `write(File file, CharSequence data, boolean append)`
  Deprecated.
  Use `write(File, CharSequence, Charset, boolean)` instead (and specify the appropriate encoding)
  `static void`
  `write(File file, CharSequence data, String charsetName)`
  Writes a CharSequence to a file creating the file if it does not exist.
  `static void`
  `write(File file, CharSequence data, String charsetName, boolean append)`
  Writes a CharSequence to a file creating the file if it does not exist.
  `static void`
  `write(File file, CharSequence data, Charset charset)`
  Writes a CharSequence to a file creating the file if it does not exist.
  `static void`
  `write(File file, CharSequence data, Charset charset, boolean append)`
  Writes a CharSequence to a file creating the file if it does not exist.
  `static void`
  `writeByteArrayToFile(File file, byte[] data)`
  Writes a byte array to a file creating the file if it does not exist.
  `static void`
  `writeByteArrayToFile(File file, byte[] data, boolean append)`
  Writes a byte array to a file creating the file if it does not exist.
  `static void`
  `writeByteArrayToFile(File file, byte[] data, int off, int len)`
  Writes `len` bytes from the specified byte array starting at offset `off` to a file, creating the file if it does not exist.
  `static void`
  `writeByteArrayToFile(File file, byte[] data, int off, int len, boolean append)`
  Writes `len` bytes from the specified byte array starting at offset `off` to a file, creating the file if it does not exist.
  `static void`
  `writeLines(File file, String charsetName, Collection<?> lines)`
  Writes the `toString()` value of each item in a collection to the specified `File` line by line.
  `static void`
  `writeLines(File file, String charsetName, Collection<?> lines, boolean append)`
  Writes the `toString()` value of each item in a collection to the specified `File` line by line, optionally appending.
  `static void`
  `writeLines(File file, String charsetName, Collection<?> lines, String lineEnding)`
  Writes the `toString()` value of each item in a collection to the specified `File` line by line.
  `static void`
  `writeLines(File file, String charsetName, Collection<?> lines, String lineEnding, boolean append)`
  Writes the `toString()` value of each item in a collection to the specified `File` line by line.
  `static void`
  `writeLines(File file, Collection<?> lines)`
  Writes the `toString()` value of each item in a collection to the specified `File` line by line.
  `static void`
  `writeLines(File file, Collection<?> lines, boolean append)`
  Writes the `toString()` value of each item in a collection to the specified `File` line by line.
  `static void`
  `writeLines(File file, Collection<?> lines, String lineEnding)`
  Writes the `toString()` value of each item in a collection to the specified `File` line by line.
  `static void`
  `writeLines(File file, Collection<?> lines, String lineEnding, boolean append)`
  Writes the `toString()` value of each item in a collection to the specified `File` line by line.
  `static void`
  `writeStringToFile(File file, String data)`
  Deprecated.
  Use `writeStringToFile(File, String, Charset)` instead (and specify the appropriate encoding)
  `static void`
  `writeStringToFile(File file, String data, boolean append)`
  Deprecated.
  Use `writeStringToFile(File, String, Charset, boolean)` instead (and specify the appropriate encoding)
  `static void`
  `writeStringToFile(File file, String data, String charsetName)`
  Writes a String to a file, creating the file if it does not exist.
  `static void`
  `writeStringToFile(File file, String data, String charsetName, boolean append)`
  Writes a String to a file, creating the file if it does not exist.
  `static void`
  `writeStringToFile(File file, String data, Charset charset)`
  Writes a String to a file creating the file if it does not exist.
  `static void`
  `writeStringToFile(File file, String data, Charset charset, boolean append)`
  Writes a String to a file, creating the file if it does not exist.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### ONE_KB

    public static final long ONE_KB
    The number of bytes in a kilobyte.
    See Also:
      - Constant Field Values

  - ### ONE_KB_BI

    public static final BigInteger ONE_KB_BI
    The number of bytes in a kilobyte.
    Since:
      2.4

  - ### ONE_MB

    public static final long ONE_MB
    The number of bytes in a megabyte.
    See Also:
      - Constant Field Values

  - ### ONE_MB_BI

    public static final BigInteger ONE_MB_BI
    The number of bytes in a megabyte.
    Since:
      2.4

  - ### ONE_GB

    public static final long ONE_GB
    The number of bytes in a gigabyte.
    See Also:
      - Constant Field Values

  - ### ONE_GB_BI

    public static final BigInteger ONE_GB_BI
    The number of bytes in a gigabyte.
    Since:
      2.4

  - ### ONE_TB

    public static final long ONE_TB
    The number of bytes in a terabyte.
    See Also:
      - Constant Field Values

  - ### ONE_TB_BI

    public static final BigInteger ONE_TB_BI
    The number of bytes in a terabyte.
    Since:
      2.4

  - ### ONE_PB

    public static final long ONE_PB
    The number of bytes in a petabyte.
    See Also:
      - Constant Field Values

  - ### ONE_PB_BI

    public static final BigInteger ONE_PB_BI
    The number of bytes in a petabyte.
    Since:
      2.4

  - ### ONE_EB

    public static final long ONE_EB
    The number of bytes in an exabyte.
    See Also:
      - Constant Field Values

  - ### ONE_EB_BI

    public static final BigInteger ONE_EB_BI
    The number of bytes in an exabyte.
    Since:
      2.4

  - ### ONE_ZB

    public static final BigInteger ONE_ZB
    The number of bytes in a zettabyte.

  - ### ONE_YB

    public static final BigInteger ONE_YB
    The number of bytes in a yottabyte.

  - ### EMPTY_FILE_ARRAY

    public static final File[] EMPTY_FILE_ARRAY
    An empty array of type `File`.

- ## Constructor Details

  - ### FileUtils

    @Deprecated public FileUtils()
    Deprecated.
    TODO Make private in 3.0.
    Instances should NOT be constructed in standard programming.

- ## Method Details

  - ### byteCountToDisplaySize

    public static String byteCountToDisplaySize(BigInteger size)
    Returns a human-readable version of the file size, where the input represents a specific number of bytes.

    If the size is over 1GB, the size is returned as the number of whole GB, the size is rounded down to the nearest GB boundary.

    Similarly for the 1MB and 1KB boundaries.

    Parameters:
      `size` - the number of bytes
    Returns:
      a human-readable display value (includes units - EB, PB, TB, GB, MB, KB or bytes)
    Throws:
      `NullPointerException` - if the given `BigInteger` is `null`.
    Since:
      2.4
    See Also:
      - IO-226 - should the rounding be changed?

  - ### byteCountToDisplaySize

    public static String byteCountToDisplaySize(long size)
    Returns a human-readable version of the file size, where the input represents a specific number of bytes.

    If the size is over 1GB, the size is returned as the number of whole GB, the size is rounded down to the nearest GB boundary.

    Similarly for the 1MB and 1KB boundaries.

    Parameters:
      `size` - the number of bytes
    Returns:
      a human-readable display value (includes units - EB, PB, TB, GB, MB, KB or bytes)
    See Also:
      - IO-226 - should the rounding be changed?

  - ### byteCountToDisplaySize

    public static String byteCountToDisplaySize(Number size)
    Returns a human-readable version of the file size, where the input represents a specific number of bytes.

    If the size is over 1GB, the size is returned as the number of whole GB, the size is rounded down to the nearest GB boundary.

    Similarly for the 1MB and 1KB boundaries.

    Parameters:
      `size` - the number of bytes
    Returns:
      a human-readable display value (includes units - EB, PB, TB, GB, MB, KB or bytes)
    Since:
      2.12.0
    See Also:
      - IO-226 - should the rounding be changed?

  - ### checksum

    public static Checksum checksum(File file, Checksum checksum) throws IOException
    Computes the checksum of a file using the specified checksum object. Multiple files may be checked using one `Checksum` instance if desired simply by reusing the same checksum object. For example:

         long checksum = FileUtils.checksum(file, new CRC32()).getValue();

    Parameters:
      `file` - the file to checksum, must not be `null`
      `checksum` - the checksum object to be used, must not be `null`
    Returns:
      the checksum specified, updated with the content of the file
    Throws:
      `NullPointerException` - if the given `File` is `null`.
      `NullPointerException` - if the given `Checksum` is `null`.
      `IllegalArgumentException` - if the given `File` is not a file.
      `FileNotFoundException` - if the file does not exist
      `IOException` - if an IO error occurs reading the file.
    Since:
      1.3

  - ### checksumCRC32

    public static long checksumCRC32(File file) throws IOException
    Computes the checksum of a file using the CRC32 checksum routine. The value of the checksum is returned.
    Parameters:
      `file` - the file to checksum, must not be `null`
    Returns:
      the checksum value
    Throws:
      `NullPointerException` - if the `file` is `null`.
      `IllegalArgumentException` - if the `file` does not exist or is not a file.
      `IOException` - if an IO error occurs reading the file.
    Since:
      1.3

  - ### cleanDirectory

    public static void cleanDirectory(File directory) throws IOException
    Cleans a directory without deleting it.
    Parameters:
      `directory` - directory to clean
    Throws:
      `NullPointerException` - if the given `File` is `null`.
      `IllegalArgumentException` - if the `directory` does not exist or is not a directory.
      `IOException` - if an I/O error occurs.
    See Also:
      - `forceDelete(File)`

  - ### contentEquals

    public static boolean contentEquals(File file1, File file2) throws IOException
    Tests whether the contents of two files are equal.

    This method checks to see if the two files are different lengths or if they point to the same file, before resorting to byte-by-byte comparison of the contents.

    Parameters:
      `file1` - the first file
      `file2` - the second file
    Returns:
      true if the content of the files are equal or they both don't exist, false otherwise
    Throws:
      `IllegalArgumentException` - when an input is not a file.
      `IOException` - If an I/O error occurs.
    See Also:
      - `PathUtils.fileContentEquals(Path,Path)`

  - ### contentEqualsIgnoreEOL

    public static boolean contentEqualsIgnoreEOL(File file1, File file2, String charsetName) throws IOException
    Compares the contents of two files to determine if they are equal or not.

    This method checks to see if the two files point to the same file, before resorting to line-by-line comparison of the contents.

    Parameters:
      `file1` - the first file
      `file2` - the second file
      `charsetName` - the name of the requested charset. May be null, in which case the platform default is used
    Returns:
      true if the content of the files are equal or neither exists, false otherwise
    Throws:
      `IllegalArgumentException` - when an input is not a file.
      `IOException` - in case of an I/O error.
      `UnsupportedCharsetException` - If the named charset is unavailable (unchecked exception).
    Since:
      2.2
    See Also:
      - `IOUtils.contentEqualsIgnoreEOL(Reader, Reader)`

  - ### convertFileCollectionToFileArray

    public static File[] convertFileCollectionToFileArray(Collection<File> files)
    Converts a Collection containing `File` instances into array representation. This is to account for the difference between File.listFiles() and FileUtils.listFiles().
    Parameters:
      `files` - a Collection containing `File` instances
    Returns:
      an array of `File`

  - ### copyDirectory

    public static void copyDirectory(File srcDir, File destDir) throws IOException
    Copies a whole directory to a new location, preserving the file dates.

    This method copies the specified directory and all its child directories and files to the specified destination. The destination is the new location and name of the directory. That is, copying /home/bar to /tmp/bang copies the contents of /home/bar into /tmp/bang. It does not create /tmp/bang/bar.

    The destination directory is created if it does not exist. If the destination directory does exist, then this method merges the source with the destination, with the source taking precedence.

    Note: This method tries to preserve the file's last modified date/times using `BasicFileAttributeView.setTimes(FileTime, FileTime, FileTime)`. However it is not guaranteed that the operation will succeed. If the modification operation fails, it falls back to `File.setLastModified(long)`. If that fails, the method throws IOException.

    Symbolic links in the source directory are copied to new symbolic links in the destination directory that point to the original target. The target of the link is not copied unless it is also under the source directory. Even if it is under the source directory, the new symbolic link in the destination points to the original target in the source directory, not to the newly created copy of the target.

    Parameters:
      `srcDir` - an existing directory to copy, must not be `null`.
      `destDir` - the new directory, must not be `null`.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `IllegalArgumentException` - if `srcDir` exists but is not a directory, the source and the destination directory are the same
      `FileNotFoundException` - if the source does not exist.
      `IOException` - if an error occurs, the destination is not writable, or setting the last-modified time didn't succeed
    Since:
      1.1

  - ### copyDirectory

    public static void copyDirectory(File srcDir, File destDir, boolean preserveFileDate) throws IOException
    Copies a whole directory to a new location.

    This method copies the contents of the specified source directory to within the specified destination directory.

    The destination directory is created if it does not exist. If the destination directory does exist, then this method merges the source with the destination, with the source taking precedence.

    Note: Setting `preserveFileDate` to `true` tries to preserve the files' last modified date/times using `File.setLastModified(long)`. However it is not guaranteed that those operations will succeed. If the modification operation fails, the method throws IOException.

    Parameters:
      `srcDir` - an existing directory to copy, must not be `null`.
      `destDir` - the new directory, must not be `null`.
      `preserveFileDate` - true if the file date of the copy should be the same as the original.
    Throws:
      `IllegalArgumentException` - if `srcDir` exists but is not a directory, or the source and the destination directory are the same
      `FileNotFoundException` - if the source does not exist.
      `IOException` - if an error occurs, the destination is not writable, or setting the last-modified time didn't succeed
    Since:
      1.1

  - ### copyDirectory

    public static void copyDirectory(File srcDir, File destDir, FileFilter filter) throws IOException
    Copies a filtered directory to a new location preserving the file dates.

    This method copies the contents of the specified source directory to within the specified destination directory.

    The destination directory is created if it does not exist. If the destination directory does exist, then this method merges the source with the destination, with the source taking precedence.

    Note: This method tries to preserve the files' last modified date/times using `File.setLastModified(long)`. However it is not guaranteed that those operations will succeed. If the modification operation fails, the method throws IOException.

    Example: Copy directories only

         // only copy the directory structure
         FileUtils.copyDirectory(srcDir, destDir, DirectoryFileFilter.DIRECTORY);

    Example: Copy directories and txt files

         // Create a filter for ".txt" files
         IOFileFilter txtSuffixFilter = FileFilterUtils.suffixFileFilter(".txt");
         IOFileFilter txtFiles = FileFilterUtils.andFileFilter(FileFileFilter.INSTANCE, txtSuffixFilter);

         // Create a filter for either directories or ".txt" files
         FileFilter filter = FileFilterUtils.orFileFilter(DirectoryFileFilter.DIRECTORY, txtFiles);

         // Copy using the filter
         FileUtils.copyDirectory(srcDir, destDir, filter);

    Parameters:
      `srcDir` - an existing directory to copy, must not be `null`.
      `destDir` - the new directory, must not be `null`.
      `filter` - the filter to apply, null means copy all directories and files should be the same as the original.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `IllegalArgumentException` - if `srcDir` exists but is not a directory, or the source and the destination directory are the same
      `FileNotFoundException` - if the source does not exist.
      `IOException` - if an error occurs, the destination is not writable, or setting the last-modified time didn't succeed
    Since:
      1.4

  - ### copyDirectory

    public static void copyDirectory(File srcDir, File destDir, FileFilter filter, boolean preserveFileDate) throws IOException
    Copies a filtered directory to a new location.

    This method copies the contents of the specified source directory to within the specified destination directory.

    The destination directory is created if it does not exist. If the destination directory does exist, then this method merges the source with the destination, with the source taking precedence.

    Note: Setting `preserveFileDate` to `true` tries to preserve the file's last modified date/times using `BasicFileAttributeView.setTimes(FileTime, FileTime, FileTime)`. However, it is not guaranteed that the operation will succeed. If the modification operation fails it falls back to `File.setLastModified(long)`. If that fails, the method throws IOException.

    Example: Copy directories only

         // only copy the directory structure
         FileUtils.copyDirectory(srcDir, destDir, DirectoryFileFilter.DIRECTORY, false);

    Example: Copy directories and txt files

         // Create a filter for ".txt" files
         IOFileFilter txtSuffixFilter = FileFilterUtils.suffixFileFilter(".txt");
         IOFileFilter txtFiles = FileFilterUtils.andFileFilter(FileFileFilter.INSTANCE, txtSuffixFilter);

         // Create a filter for either directories or ".txt" files
         FileFilter filter = FileFilterUtils.orFileFilter(DirectoryFileFilter.DIRECTORY, txtFiles);

         // Copy using the filter
         FileUtils.copyDirectory(srcDir, destDir, filter, false);

    Parameters:
      `srcDir` - an existing directory to copy, must not be `null`.
      `destDir` - the new directory, must not be `null`.
      `filter` - the filter to apply, null means copy all directories and files.
      `preserveFileDate` - true if the file date of the copy should be the same as the original.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `IllegalArgumentException` - if `srcDir` exists but is not a directory, the source and the destination directory are the same, or the destination is not writable
      `FileNotFoundException` - if the source does not exist.
      `IOException` - if an error occurs or setting the last-modified time didn't succeed.
    Since:
      1.4

  - ### copyDirectory

    public static void copyDirectory(File srcDir, File destDir, FileFilter fileFilter, boolean preserveFileDate, CopyOption... copyOptions) throws IOException
    Copies a filtered directory to a new location.

    This method copies the contents of the specified source directory to within the specified destination directory.

    The destination directory is created if it does not exist. If the destination directory does exist, then this method merges the source with the destination, with the source taking precedence.

    Note: Setting `preserveFileDate` to `true` tries to preserve the file's last modified date/times using `BasicFileAttributeView.setTimes(FileTime, FileTime, FileTime)`. However, it is not guaranteed that the operation will succeed. If the modification operation fails it falls back to `File.setLastModified(long)`. If that fails, the method throws IOException.

    Example: Copy directories only

         // only copy the directory structure
         FileUtils.copyDirectory(srcDir, destDir, DirectoryFileFilter.DIRECTORY, false);

    Example: Copy directories and txt files

         // Create a filter for ".txt" files
         IOFileFilter txtSuffixFilter = FileFilterUtils.suffixFileFilter(".txt");
         IOFileFilter txtFiles = FileFilterUtils.andFileFilter(FileFileFilter.INSTANCE, txtSuffixFilter);

         // Create a filter for either directories or ".txt" files
         FileFilter filter = FileFilterUtils.orFileFilter(DirectoryFileFilter.DIRECTORY, txtFiles);

         // Copy using the filter
         FileUtils.copyDirectory(srcDir, destDir, filter, false);

    Parameters:
      `srcDir` - an existing directory to copy, must not be `null`
      `destDir` - the new directory, must not be `null`
      `fileFilter` - the filter to apply, null means copy all directories and files
      `preserveFileDate` - true if the file date of the copy should be the same as the original
      `copyOptions` - options specifying how the copy should be done, for example `StandardCopyOption`.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `IllegalArgumentException` - if `srcDir` exists but is not a directory, or the source and the destination directory are the same
      `FileNotFoundException` - if the source does not exist.
      `IOException` - if an error occurs, the destination is not writable, or setting the last-modified time didn't succeed
    Since:
      2.8.0

  - ### copyDirectoryToDirectory

    public static void copyDirectoryToDirectory(File sourceDir, File destinationDir) throws IOException
    Copies a directory to within another directory preserving the file dates.

    This method copies the source directory and all its contents to a directory of the same name in the specified destination directory.

    The destination directory is created if it does not exist. If the destination directory does exist, then this method merges the source with the destination, with the source taking precedence.

    Note: Setting `preserveFileDate` to `true` tries to preserve the file's last modified date/times using `BasicFileAttributeView.setTimes(FileTime, FileTime, FileTime)`. However, it is not guaranteed that the operation will succeed. If the modification operation fails it falls back to `File.setLastModified(long)` and if that fails, the method throws IOException.

    Parameters:
      `sourceDir` - an existing directory to copy, must not be `null`.
      `destinationDir` - the directory to place the copy in, must not be `null`.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `IllegalArgumentException` - if the source or destination is invalid.
      `FileNotFoundException` - if the source does not exist.
      `IOException` - if an error occurs, the destination is not writable, or setting the last-modified time didn't succeed
    Since:
      1.2

  - ### copyFile

    public static void copyFile(File srcFile, File destFile) throws IOException
    Copies a file to a new location preserving the file date.

    This method copies the contents of the specified source file to the specified destination file. The directory holding the destination file is created if it does not exist. If the destination file exists, then this method overwrites it. A symbolic link is resolved before copying so the new file is not a link.

    Note: This method tries to preserve the file's last modified date/times using `BasicFileAttributeView.setTimes(FileTime, FileTime, FileTime)`. However, it is not guaranteed that the operation will succeed. If the modification operation fails, it falls back to `File.setLastModified(long)`, and if that fails, the method throws IOException.

    Parameters:
      `srcFile` - an existing file to copy, must not be `null`.
      `destFile` - the new file, must not be `null`.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `IOException` - if source or destination is invalid.
      `IOException` - if an error occurs or setting the last-modified time didn't succeed.
      `IOException` - if the output file length is not the same as the input file length after the copy completes.
    See Also:
      - `copyFileToDirectory(File, File)`
      - `copyFile(File, File, boolean)`

  - ### copyFile

    public static void copyFile(File srcFile, File destFile, boolean preserveFileDate) throws IOException
    Copies an existing file to a new file location.

    This method copies the contents of the specified source file to the specified destination file. The directory holding the destination file is created if it does not exist. If the destination file exists, then this method overwrites it. A symbolic link is resolved before copying so the new file is not a link.

    Note: Setting `preserveFileDate` to `true` tries to preserve the file's last modified date/times using `BasicFileAttributeView.setTimes(FileTime, FileTime, FileTime)`. However, it is not guaranteed that the operation will succeed. If the modification operation fails, it falls back to `File.setLastModified(long)`, and if that fails, the method throws IOException.

    Parameters:
      `srcFile` - an existing file to copy, must not be `null`.
      `destFile` - the new file, must not be `null`.
      `preserveFileDate` - true if the file date of the copy should be the same as the original.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `IOException` - if source or destination is invalid.
      `IOException` - if an error occurs or setting the last-modified time didn't succeed.
      `IOException` - if the output file length is not the same as the input file length after the copy completes
    See Also:
      - `copyFile(File, File, boolean, CopyOption...)`

  - ### copyFile

    public static void copyFile(File srcFile, File destFile, boolean preserveFileDate, CopyOption... copyOptions) throws IOException
    Copies the contents of a file to a new location.

    This method copies the contents of the specified source file to the specified destination file. The directory holding the destination file is created if it does not exist. If the destination file exists, you can overwrite it with `StandardCopyOption.REPLACE_EXISTING`.

    By default, a symbolic link is resolved before copying so the new file is not a link. To copy symbolic links as links, you can pass `LinkOption.NO_FOLLOW_LINKS` as the last argument.

    Note: Setting `preserveFileDate` to `true` tries to preserve the file's last modified date/times using `BasicFileAttributeView.setTimes(FileTime, FileTime, FileTime)`. However, it is not guaranteed that the operation will succeed. If the modification operation fails, it falls back to `File.setLastModified(long)`, and if that fails, the method throws IOException.

    Parameters:
      `srcFile` - an existing file to copy, must not be `null`.
      `destFile` - the new file, must not be `null`.
      `preserveFileDate` - true if the file date of the copy should be the same as the original.
      `copyOptions` - options specifying how the copy should be done, for example `StandardCopyOption`.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `FileNotFoundException` - if the source does not exist.
      `IllegalArgumentException` - if `srcFile` or `destFile` is not a file
      `IOException` - if the output file length is not the same as the input file length after the copy completes.
      `IOException` - if an I/O error occurs, setting the last-modified time didn't succeed, or the destination is not writable
    Since:
      2.8.0
    See Also:
      - `copyFileToDirectory(File, File, boolean)`

  - ### copyFile

    public static void copyFile(File srcFile, File destFile, CopyOption... copyOptions) throws IOException
    Copies a file to a new location.

    This method copies the contents of the specified source file to the specified destination file. The directory holding the destination file is created if it does not exist. If the destination file exists, you can overwrite it if you use `StandardCopyOption.REPLACE_EXISTING`.

    Parameters:
      `srcFile` - an existing file to copy, must not be `null`.
      `destFile` - the new file, must not be `null`.
      `copyOptions` - options specifying how the copy should be done, for example `StandardCopyOption`.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `FileNotFoundException` - if the source does not exist.
      `IllegalArgumentException` - if source is not a file.
      `IOException` - if an I/O error occurs.
    Since:
      2.9.0
    See Also:
      - `StandardCopyOption`

  - ### copyFile

    public static long copyFile(File input, OutputStream output) throws IOException
    Copies bytes from a `File` to an `OutputStream`.

    This method buffers the input internally, so there is no need to use a `BufferedInputStream`.

    Parameters:
      `input` - the `File` to read.
      `output` - the `OutputStream` to write.
    Returns:
      the number of bytes copied
    Throws:
      `NullPointerException` - if the File is `null`.
      `NullPointerException` - if the OutputStream is `null`.
      `IOException` - if an I/O error occurs.
    Since:
      2.1

  - ### copyFileToDirectory

    public static void copyFileToDirectory(File srcFile, File destDir) throws IOException
    Copies a file to a directory preserving the file date.

    This method copies the contents of the specified source file to a file of the same name in the specified destination directory. The destination directory is created if it does not exist. If the destination file exists, then this method will overwrite it.

    Note: This method tries to preserve the file's last modified date/times using `BasicFileAttributeView.setTimes(FileTime, FileTime, FileTime)`. However, it is not guaranteed that the operation will succeed. If the modification operation fails it falls back to `File.setLastModified(long)` and if that fails, the method throws IOException.

    Parameters:
      `srcFile` - an existing file to copy, must not be `null`.
      `destDir` - the directory to place the copy in, must not be `null`.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `IllegalArgumentException` - if source or destination is invalid.
      `IOException` - if an error occurs or setting the last-modified time didn't succeed.
    See Also:
      - `copyFile(File, File, boolean)`

  - ### copyFileToDirectory

    public static void copyFileToDirectory(File sourceFile, File destinationDir, boolean preserveFileDate) throws IOException
    Copies a file to a directory optionally preserving the file date.

    This method copies the contents of the specified source file to a file of the same name in the specified destination directory. The destination directory is created if it does not exist. If the destination file exists, then this method will overwrite it.

    Note: Setting `preserveFileDate` to `true` tries to preserve the file's last modified date/times using `BasicFileAttributeView.setTimes(FileTime, FileTime, FileTime)`. However, it is not guaranteed that the operation will succeed. If the modification operation fails it falls back to `File.setLastModified(long)` and if that fails, the method throws IOException.

    Parameters:
      `sourceFile` - an existing file to copy, must not be `null`.
      `destinationDir` - the directory to place the copy in, must not be `null`.
      `preserveFileDate` - true if the file date of the copy should be the same as the original.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `IOException` - if an error occurs or setting the last-modified time didn't succeed.
      `IOException` - if the output file length is not the same as the input file length after the copy completes.
    Since:
      1.3
    See Also:
      - `copyFile(File, File, CopyOption...)`

  - ### copyInputStreamToFile

    public static void copyInputStreamToFile(InputStream source, File destination) throws IOException
    Copies bytes from an `InputStream` `source` to a file `destination`. The directories up to `destination` will be created if they don't already exist. `destination` will be overwritten if it already exists.

    The `source` stream is closed.

    See `copyToFile(InputStream, File)` for a method that does not close the input stream.

    Parameters:
      `source` - the `InputStream` to copy bytes from, must not be `null`, will be closed
      `destination` - the non-directory `File` to write bytes to (possibly overwriting), must not be `null`
    Throws:
      `IOException` - if `destination` is a directory
      `IOException` - if `destination` cannot be written
      `IOException` - if `destination` needs creating but can't be
      `IOException` - if an IO error occurs during copying
    Since:
      2.0

  - ### copyToDirectory

    public static void copyToDirectory(File sourceFile, File destinationDir) throws IOException
    Copies a file or directory to within another directory preserving the file dates.

    This method copies the source file or directory, along with all its contents, to a directory of the same name in the specified destination directory.

    The destination directory is created if it does not exist. If the destination directory does exist, then this method merges the source with the destination, with the source taking precedence.

    Note: Setting `preserveFileDate` to `true` tries to preserve the file's last modified date/times using `BasicFileAttributeView.setTimes(FileTime, FileTime, FileTime)`. However, it is not guaranteed that the operation will succeed. If the modification operation fails it falls back to `File.setLastModified(long)` and if that fails, the method throws IOException.

    Parameters:
      `sourceFile` - an existing file or directory to copy, must not be `null`.
      `destinationDir` - the directory to place the copy in, must not be `null`.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `IllegalArgumentException` - if the source or destination is invalid.
      `FileNotFoundException` - if the source does not exist.
      `IOException` - if an error occurs or setting the last-modified time didn't succeed.
    Since:
      2.6
    See Also:
      - `copyDirectoryToDirectory(File, File)`
      - `copyFileToDirectory(File, File)`

  - ### copyToDirectory

    public static void copyToDirectory(Iterable<File> sourceIterable, File destinationDir) throws IOException
    Copies a files to a directory preserving each file's date.

    This method copies the contents of the specified source files to a file of the same name in the specified destination directory. The destination directory is created if it does not exist. If the destination file exists, then this method will overwrite it.

    Note: This method tries to preserve the file's last modified date/times using `BasicFileAttributeView.setTimes(FileTime, FileTime, FileTime)`. However, it is not guaranteed that the operation will succeed. If the modification operation fails it falls back to `File.setLastModified(long)` and if that fails, the method throws IOException.

    Parameters:
      `sourceIterable` - existing files to copy, must not be `null`.
      `destinationDir` - the directory to place the copies in, must not be `null`.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `IOException` - if source or destination is invalid.
      `IOException` - if an error occurs or setting the last-modified time didn't succeed.
    Since:
      2.6
    See Also:
      - `copyFileToDirectory(File, File)`

  - ### copyToFile

    public static void copyToFile(InputStream inputStream, File file) throws IOException
    Copies bytes from an `InputStream` source to a `File` destination. The directories up to `destination` will be created if they don't already exist. `destination` will be overwritten if it already exists. The `source` stream is left open, e.g. for use with `ZipInputStream`. See `copyInputStreamToFile(InputStream, File)` for a method that closes the input stream.
    Parameters:
      `inputStream` - the `InputStream` to copy bytes from, must not be `null`
      `file` - the non-directory `File` to write bytes to (possibly overwriting), must not be `null`
    Throws:
      `NullPointerException` - if the InputStream is `null`.
      `NullPointerException` - if the File is `null`.
      `IllegalArgumentException` - if the file object is a directory.
      `IllegalArgumentException` - if the file is not writable.
      `IOException` - if the directories could not be created.
      `IOException` - if an IO error occurs during copying.
    Since:
      2.5

  - ### copyURLToFile

    public static void copyURLToFile(URL source, File destination) throws IOException
    Copies bytes from the URL `source` to a file `destination`. The directories up to `destination` will be created if they don't already exist. `destination` will be overwritten if it already exists.

    Warning: this method does not set a connection or read timeout and thus might block forever. Use `copyURLToFile(URL, File, int, int)` with reasonable timeouts to prevent this.

    Parameters:
      `source` - the `URL` to copy bytes from, must not be `null`
      `destination` - the non-directory `File` to write bytes to (possibly overwriting), must not be `null`
    Throws:
      `IOException` - if `source` URL cannot be opened
      `IOException` - if `destination` is a directory
      `IOException` - if `destination` cannot be written
      `IOException` - if `destination` needs creating but can't be
      `IOException` - if an IO error occurs during copying

  - ### copyURLToFile

    public static void copyURLToFile(URL source, File destination, int connectionTimeoutMillis, int readTimeoutMillis) throws IOException
    Copies bytes from the URL `source` to a file `destination`. The directories up to `destination` will be created if they don't already exist. `destination` will be overwritten if it already exists.
    Parameters:
      `source` - the `URL` to copy bytes from, must not be `null`
      `destination` - the non-directory `File` to write bytes to (possibly overwriting), must not be `null`
      `connectionTimeoutMillis` - the number of milliseconds until this method will time out if no connection could be established to the `source`
      `readTimeoutMillis` - the number of milliseconds until this method will time out if no data could be read from the `source`
    Throws:
      `IOException` - if `source` URL cannot be opened
      `IOException` - if `destination` is a directory
      `IOException` - if `destination` cannot be written
      `IOException` - if `destination` needs creating but can't be
      `IOException` - if an IO error occurs during copying
    Since:
      2.0

  - ### createParentDirectories

    public static File createParentDirectories(File file) throws IOException
    Creates all parent directories for a File object, including any necessary but non-existent parent directories. If a parent directory already exists or is null, nothing happens.
    Parameters:
      `file` - the File that may need parents, may be null.
    Returns:
      The parent directory, or `null` if the given File does have a parent.
    Throws:
      `IOException` - if the directory was not created along with all its parent directories.
      `SecurityException` - See `File.mkdirs()`.
    Since:
      2.9.0

  - ### current

    public static File current()
    Gets the current directory.
    Returns:
      the current directory.
    Since:
      2.12.0

  - ### delete

    public static File delete(File file) throws IOException
    Deletes the given File but throws an IOException if it cannot, unlike `File.delete()` which returns a boolean.
    Parameters:
      `file` - The file to delete.
    Returns:
      the given file.
    Throws:
      `NullPointerException` - if the parameter is `null`
      `IOException` - if the file cannot be deleted.
    Since:
      2.9.0
    See Also:
      - `File.delete()`

  - ### deleteDirectory

    public static void deleteDirectory(File directory) throws IOException
    Deletes a directory recursively.
    Parameters:
      `directory` - directory to delete
    Throws:
      `IOException` - in case deletion is unsuccessful
      `NullPointerException` - if the parameter is `null`
      `IllegalArgumentException` - if `directory` is not a directory

  - ### deleteQuietly

    public static boolean deleteQuietly(File file)
    Deletes a file, never throwing an exception. If file is a directory, delete it and all subdirectories.

    The difference between File.delete() and this method are:

    - A directory to be deleted does not have to be empty.
    - No exceptions are thrown when a file or directory cannot be deleted.
    Parameters:
      `file` - file or directory to delete, can be `null`
    Returns:
      `true` if the file or directory was deleted, otherwise `false`
    Since:
      1.4

  - ### directoryContains

    public static boolean directoryContains(File directory, File child) throws IOException
    Determines whether the `parent` directory contains the `child` element (a file or directory).

    Files are normalized before comparison.

    Edge cases:
    - A `directory` must not be null: if null, throw NullPointerException
    - A `directory` must be a directory: if not a directory, throw IllegalArgumentException
    - A directory does not contain itself: return false
    - A null child file is not contained in any parent: return false
    Parameters:
      `directory` - the file to consider as the parent.
      `child` - the file to consider as the child.
    Returns:
      true is the candidate leaf is under by the specified composite. False otherwise.
    Throws:
      `IOException` - if an IO error occurs while checking the files.
      `NullPointerException` - if the parent is `null`.
      `IllegalArgumentException` - if the parent is not a directory.
    Since:
      2.2
    See Also:
      - `FilenameUtils.directoryContains(String, String)`

  - ### forceDelete

    public static void forceDelete(File file) throws IOException
    Deletes a file or directory. For a directory, delete it and all subdirectories.

    The difference between File.delete() and this method are:

    - The directory does not have to be empty.
    - You get an exception when a file or directory cannot be deleted.
    Parameters:
      `file` - file or directory to delete, must not be `null`.
    Throws:
      `NullPointerException` - if the file is `null`.
      `FileNotFoundException` - if the file was not found.
      `IOException` - in case deletion is unsuccessful.

  - ### forceDeleteOnExit

    public static void forceDeleteOnExit(File file) throws IOException
    Schedules a file to be deleted when JVM exits. If file is directory delete it and all subdirectories.
    Parameters:
      `file` - file or directory to delete, must not be `null`.
    Throws:
      `NullPointerException` - if the file is `null`.
      `IOException` - in case deletion is unsuccessful.

  - ### forceMkdir

    public static void forceMkdir(File directory) throws IOException
    Creates all directories for a File object, including any necessary but non-existent parent directories. If the `directory` already exists or is null, nothing happens.

    Calls `File.mkdirs()` and throws an `IOException` on failure.

    Parameters:
      `directory` - the receiver for `mkdirs()`. If the `directory` already exists or is null, nothing happens.
    Throws:
      `IOException` - if the directory was not created along with all its parent directories.
      `IOException` - if the given file object is not a directory.
      `SecurityException` - See `File.mkdirs()`.
    See Also:
      - `File.mkdirs()`

  - ### forceMkdirParent

    public static void forceMkdirParent(File file) throws IOException
    Creates all directories for a File object, including any necessary but non-existent parent directories. If the parent directory already exists or is null, nothing happens.

    Calls `File.mkdirs()` for the parent of `file`.

    Parameters:
      `file` - file with parents to create, must not be `null`.
    Throws:
      `NullPointerException` - if the file is `null`.
      `IOException` - if the directory was not created along with all its parent directories.
      `SecurityException` - See `File.mkdirs()`.
    Since:
      2.5
    See Also:
      - `File.mkdirs()`

  - ### getFile

    public static File getFile(File directory, String... names)
    Constructs a file from the set of name elements.
    Parameters:
      `directory` - the parent directory.
      `names` - the name elements.
    Returns:
      the new file.
    Since:
      2.1

  - ### getFile

    public static File getFile(String... names)
    Constructs a file from the set of name elements.
    Parameters:
      `names` - the name elements.
    Returns:
      the file.
    Since:
      2.1

  - ### getTempDirectory

    public static File getTempDirectory()
    Returns a `File` representing the system temporary directory.
    Returns:
      the system temporary directory as a File
    Since:
      2.0

  - ### getTempDirectoryPath

    public static String getTempDirectoryPath()
    Returns the path to the system temporary directory. WARNING: this method relies on the Java system property 'java.io.tmpdir' which may or may not have a trailing file separator. This can affect code that uses String processing to manipulate pathnames rather than the standard libary methods in classes such as `File`
    Returns:
      the path to the system temporary directory as a String
    Since:
      2.0

  - ### getUserDirectory

    public static File getUserDirectory()
    Returns a `File` representing the user's home directory.
    Returns:
      the user's home directory.
    Since:
      2.0

  - ### getUserDirectoryPath

    public static String getUserDirectoryPath()
    Returns the path to the user's home directory.
    Returns:
      the path to the user's home directory.
    Since:
      2.0

  - ### isDirectory

    public static boolean isDirectory(File file, LinkOption... options)
    Tests whether the specified `File` is a directory or not. Implemented as a null-safe delegate to `Files.isDirectory(Path path, LinkOption...options)`.
    Parameters:
      `file` - the path to the file.
      `options` - options indicating how symbolic links are handled
    Returns:
      `true` if the file is a directory; `false` if the path is null, the file does not exist, is not a directory, or it cannot be determined if the file is a directory or not.
    Throws:
      `SecurityException` - In the case of the default provider, and a security manager is installed, the `checkRead` method is invoked to check read access to the directory.
    Since:
      2.9.0

  - ### isEmptyDirectory

    public static boolean isEmptyDirectory(File directory) throws IOException
    Tests whether the directory is empty.
    Parameters:
      `directory` - the directory to query.
    Returns:
      whether the directory is empty.
    Throws:
      `IOException` - if an I/O error occurs.
      `NotDirectoryException` - if the file could not otherwise be opened because it is not a directory (optional specific exception).
    Since:
      2.9.0

  - ### isFileNewer

    public static boolean isFileNewer(File file, ChronoLocalDate chronoLocalDate)
    Tests if the specified `File` is newer than the specified `ChronoLocalDate` at the end of day.

    Note: The input date is assumed to be in the system default time-zone with the time part set to the current time. To use a non-default time-zone use the method `isFileNewer(file, chronoLocalDate.atTime(LocalTime.now(zoneId)), zoneId)` where `zoneId` is a valid `ZoneId`.

    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `chronoLocalDate` - the date reference.
    Returns:
      true if the `File` exists and has been modified after the given `ChronoLocalDate` at the current time.
    Throws:
      `UncheckedIOException` - if an I/O error occurs
      `NullPointerException` - if the file or local date is `null`.
    Since:
      2.8.0

  - ### isFileNewer

    public static boolean isFileNewer(File file, ChronoLocalDate chronoLocalDate, LocalTime localTime)
    Tests if the specified `File` is newer than the specified `ChronoLocalDate` at the specified time.

    Note: The input date and time are assumed to be in the system default time-zone. To use a non-default time-zone use the method `isFileNewer(file, chronoLocalDate.atTime(localTime), zoneId)` where `zoneId` is a valid `ZoneId`.

    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `chronoLocalDate` - the date reference.
      `localTime` - the time reference.
    Returns:
      true if the `File` exists and has been modified after the given `ChronoLocalDate` at the given time.
    Throws:
      `UncheckedIOException` - if an I/O error occurs
      `NullPointerException` - if the file, local date or zone ID is `null`.
    Since:
      2.8.0

  - ### isFileNewer

    public static boolean isFileNewer(File file, ChronoLocalDate chronoLocalDate, OffsetTime offsetTime)
    Tests if the specified `File` is newer than the specified `ChronoLocalDate` at the specified `OffsetTime`.
    Parameters:
      `file` - the `File` of which the modification date must be compared
      `chronoLocalDate` - the date reference
      `offsetTime` - the time reference
    Returns:
      true if the `File` exists and has been modified after the given `ChronoLocalDate` at the given `OffsetTime`.
    Throws:
      `UncheckedIOException` - if an I/O error occurs
      `NullPointerException` - if the file, local date or zone ID is `null`
    Since:
      2.12.0

  - ### isFileNewer

    public static boolean isFileNewer(File file, ChronoLocalDateTime<?> chronoLocalDateTime)
    Tests if the specified `File` is newer than the specified `ChronoLocalDateTime` at the system-default time zone.

    Note: The input date and time is assumed to be in the system default time-zone. To use a non-default time-zone use the method `isFileNewer(file, chronoLocalDateTime, zoneId)` where `zoneId` is a valid `ZoneId`.

    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `chronoLocalDateTime` - the date reference.
    Returns:
      true if the `File` exists and has been modified after the given `ChronoLocalDateTime` at the system-default time zone.
    Throws:
      `UncheckedIOException` - if an I/O error occurs
      `NullPointerException` - if the file or local date time is `null`.
    Since:
      2.8.0

  - ### isFileNewer

    public static boolean isFileNewer(File file, ChronoLocalDateTime<?> chronoLocalDateTime, ZoneId zoneId)
    Tests if the specified `File` is newer than the specified `ChronoLocalDateTime` at the specified `ZoneId`.
    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `chronoLocalDateTime` - the date reference.
      `zoneId` - the time zone.
    Returns:
      true if the `File` exists and has been modified after the given `ChronoLocalDateTime` at the given `ZoneId`.
    Throws:
      `UncheckedIOException` - if an I/O error occurs
      `NullPointerException` - if the file, local date time or zone ID is `null`.
    Since:
      2.8.0

  - ### isFileNewer

    public static boolean isFileNewer(File file, ChronoZonedDateTime<?> chronoZonedDateTime)
    Tests if the specified `File` is newer than the specified `ChronoZonedDateTime`.
    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `chronoZonedDateTime` - the date reference.
    Returns:
      true if the `File` exists and has been modified after the given `ChronoZonedDateTime`.
    Throws:
      `NullPointerException` - if the file or zoned date time is `null`.
      `UncheckedIOException` - if an I/O error occurs
    Since:
      2.8.0

  - ### isFileNewer

    public static boolean isFileNewer(File file, Date date)
    Tests if the specified `File` is newer than the specified `Date`.
    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `date` - the date reference.
    Returns:
      true if the `File` exists and has been modified after the given `Date`.
    Throws:
      `UncheckedIOException` - if an I/O error occurs
      `NullPointerException` - if the file or date is `null`.

  - ### isFileNewer

    public static boolean isFileNewer(File file, File reference)
    Tests if the specified `File` is newer than the reference `File`.
    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `reference` - the `File` of which the modification date is used.
    Returns:
      true if the `File` exists and has been modified more recently than the reference `File`.
    Throws:
      `NullPointerException` - if the file or reference file is `null`.
      `UncheckedIOException` - if the reference file doesn't exist.

  - ### isFileNewer

    public static boolean isFileNewer(File file, FileTime fileTime) throws IOException
    Tests if the specified `File` is newer than the specified `FileTime`.
    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `fileTime` - the file time reference.
    Returns:
      true if the `File` exists and has been modified after the given `FileTime`.
    Throws:
      `IOException` - if an I/O error occurs.
      `NullPointerException` - if the file or local date is `null`.
    Since:
      2.12.0

  - ### isFileNewer

    public static boolean isFileNewer(File file, Instant instant)
    Tests if the specified `File` is newer than the specified `Instant`.
    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `instant` - the date reference.
    Returns:
      true if the `File` exists and has been modified after the given `Instant`.
    Throws:
      `NullPointerException` - if the file or instant is `null`.
      `UncheckedIOException` - if an I/O error occurs
    Since:
      2.8.0

  - ### isFileNewer

    public static boolean isFileNewer(File file, long timeMillis)
    Tests if the specified `File` is newer than the specified time reference.
    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `timeMillis` - the time reference measured in milliseconds since the epoch (00:00:00 GMT, January 1, 1970).
    Returns:
      true if the `File` exists and has been modified after the given time reference.
    Throws:
      `UncheckedIOException` - if an I/O error occurs
      `NullPointerException` - if the file is `null`.

  - ### isFileNewer

    public static boolean isFileNewer(File file, OffsetDateTime offsetDateTime)
    Tests if the specified `File` is newer than the specified `OffsetDateTime`.
    Parameters:
      `file` - the `File` of which the modification date must be compared
      `offsetDateTime` - the date reference
    Returns:
      true if the `File` exists and has been modified before the given `OffsetDateTime`.
    Throws:
      `UncheckedIOException` - if an I/O error occurs
      `NullPointerException` - if the file or zoned date time is `null`
    Since:
      2.12.0

  - ### isFileOlder

    public static boolean isFileOlder(File file, ChronoLocalDate chronoLocalDate)
    Tests if the specified `File` is older than the specified `ChronoLocalDate` at the end of day.

    Note: The input date is assumed to be in the system default time-zone with the time part set to the current time. To use a non-default time-zone use the method `isFileOlder(file, chronoLocalDate.atTime(LocalTime.now(zoneId)), zoneId)` where `zoneId` is a valid `ZoneId`.

    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `chronoLocalDate` - the date reference.
    Returns:
      true if the `File` exists and has been modified before the given `ChronoLocalDate` at the current time.
    Throws:
      `NullPointerException` - if the file or local date is `null`.
      `UncheckedIOException` - if an I/O error occurs
    Since:
      2.8.0
    See Also:
      - `ZoneId.systemDefault()`
      - `LocalTime.now()`

  - ### isFileOlder

    public static boolean isFileOlder(File file, ChronoLocalDate chronoLocalDate, LocalTime localTime)
    Tests if the specified `File` is older than the specified `ChronoLocalDate` at the specified `LocalTime`.

    Note: The input date and time are assumed to be in the system default time-zone. To use a non-default time-zone use the method `isFileOlder(file, chronoLocalDate.atTime(localTime), zoneId)` where `zoneId` is a valid `ZoneId`.

    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `chronoLocalDate` - the date reference.
      `localTime` - the time reference.
    Returns:
      true if the `File` exists and has been modified before the given `ChronoLocalDate` at the specified time.
    Throws:
      `UncheckedIOException` - if an I/O error occurs
      `NullPointerException` - if the file, local date or local time is `null`.
    Since:
      2.8.0
    See Also:
      - `ZoneId.systemDefault()`

  - ### isFileOlder

    public static boolean isFileOlder(File file, ChronoLocalDate chronoLocalDate, OffsetTime offsetTime)
    Tests if the specified `File` is older than the specified `ChronoLocalDate` at the specified `OffsetTime`.
    Parameters:
      `file` - the `File` of which the modification date must be compared
      `chronoLocalDate` - the date reference
      `offsetTime` - the time reference
    Returns:
      true if the `File` exists and has been modified after the given `ChronoLocalDate` at the given `OffsetTime`.
    Throws:
      `NullPointerException` - if the file, local date or zone ID is `null`
      `UncheckedIOException` - if an I/O error occurs
    Since:
      2.12.0

  - ### isFileOlder

    public static boolean isFileOlder(File file, ChronoLocalDateTime<?> chronoLocalDateTime)
    Tests if the specified `File` is older than the specified `ChronoLocalDateTime` at the system-default time zone.

    Note: The input date and time is assumed to be in the system default time-zone. To use a non-default time-zone use the method `isFileOlder(file, chronoLocalDateTime, zoneId)` where `zoneId` is a valid `ZoneId`.

    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `chronoLocalDateTime` - the date reference.
    Returns:
      true if the `File` exists and has been modified before the given `ChronoLocalDateTime` at the system-default time zone.
    Throws:
      `NullPointerException` - if the file or local date time is `null`.
      `UncheckedIOException` - if an I/O error occurs
    Since:
      2.8.0
    See Also:
      - `ZoneId.systemDefault()`

  - ### isFileOlder

    public static boolean isFileOlder(File file, ChronoLocalDateTime<?> chronoLocalDateTime, ZoneId zoneId)
    Tests if the specified `File` is older than the specified `ChronoLocalDateTime` at the specified `ZoneId`.
    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `chronoLocalDateTime` - the date reference.
      `zoneId` - the time zone.
    Returns:
      true if the `File` exists and has been modified before the given `ChronoLocalDateTime` at the given `ZoneId`.
    Throws:
      `NullPointerException` - if the file, local date time or zone ID is `null`.
      `UncheckedIOException` - if an I/O error occurs
    Since:
      2.8.0

  - ### isFileOlder

    public static boolean isFileOlder(File file, ChronoZonedDateTime<?> chronoZonedDateTime)
    Tests if the specified `File` is older than the specified `ChronoZonedDateTime`.
    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `chronoZonedDateTime` - the date reference.
    Returns:
      true if the `File` exists and has been modified before the given `ChronoZonedDateTime`.
    Throws:
      `NullPointerException` - if the file or zoned date time is `null`.
      `UncheckedIOException` - if an I/O error occurs
    Since:
      2.8.0

  - ### isFileOlder

    public static boolean isFileOlder(File file, Date date)
    Tests if the specified `File` is older than the specified `Date`.
    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `date` - the date reference.
    Returns:
      true if the `File` exists and has been modified before the given `Date`.
    Throws:
      `NullPointerException` - if the file or date is `null`.
      `UncheckedIOException` - if an I/O error occurs

  - ### isFileOlder

    public static boolean isFileOlder(File file, File reference) throws FileNotFoundException
    Tests if the specified `File` is older than the reference `File`.
    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `reference` - the `File` of which the modification date is used.
    Returns:
      true if the `File` exists and has been modified before the reference `File`.
    Throws:
      `NullPointerException` - if the file or reference file is `null`.
      `FileNotFoundException` - if the reference file doesn't exist.
      `UncheckedIOException` - if an I/O error occurs

  - ### isFileOlder

    public static boolean isFileOlder(File file, FileTime fileTime) throws IOException
    Tests if the specified `File` is older than the specified `FileTime`.
    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `fileTime` - the file time reference.
    Returns:
      true if the `File` exists and has been modified before the given `FileTime`.
    Throws:
      `IOException` - if an I/O error occurs.
      `NullPointerException` - if the file or local date is `null`.
    Since:
      2.12.0

  - ### isFileOlder

    public static boolean isFileOlder(File file, Instant instant)
    Tests if the specified `File` is older than the specified `Instant`.
    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `instant` - the date reference.
    Returns:
      true if the `File` exists and has been modified before the given `Instant`.
    Throws:
      `NullPointerException` - if the file or instant is `null`.
    Since:
      2.8.0

  - ### isFileOlder

    public static boolean isFileOlder(File file, long timeMillis)
    Tests if the specified `File` is older than the specified time reference.
    Parameters:
      `file` - the `File` of which the modification date must be compared.
      `timeMillis` - the time reference measured in milliseconds since the epoch (00:00:00 GMT, January 1, 1970).
    Returns:
      true if the `File` exists and has been modified before the given time reference.
    Throws:
      `NullPointerException` - if the file is `null`.
      `UncheckedIOException` - if an I/O error occurs

  - ### isFileOlder

    public static boolean isFileOlder(File file, OffsetDateTime offsetDateTime)
    Tests if the specified `File` is older than the specified `OffsetDateTime`.
    Parameters:
      `file` - the `File` of which the modification date must be compared
      `offsetDateTime` - the date reference
    Returns:
      true if the `File` exists and has been modified before the given `OffsetDateTime`.
    Throws:
      `NullPointerException` - if the file or zoned date time is `null`
    Since:
      2.12.0

  - ### isRegularFile

    public static boolean isRegularFile(File file, LinkOption... options)
    Tests whether the specified `File` is a regular file or not. Implemented as a null-safe delegate to `Files.isRegularFile(Path path, LinkOption...options)`.
    Parameters:
      `file` - the path to the file.
      `options` - options indicating how symbolic links are handled
    Returns:
      `true` if the file is a regular file; `false` if the path is null, the file does not exist, is not a regular file, or it cannot be determined if the file is a regular file or not.
    Throws:
      `SecurityException` - In the case of the default provider, and a security manager is installed, the `checkRead` method is invoked to check read access to the directory.
    Since:
      2.9.0

  - ### isSymlink

    public static boolean isSymlink(File file)
    Tests whether the specified file is a symbolic link rather than an actual file.

    This method delegates to `Files.isSymbolicLink(Path path)`

    Parameters:
      `file` - the file to test.
    Returns:
      true if the file is a symbolic link, see `Files.isSymbolicLink(Path path)`.
    Since:
      2.0
    See Also:
      - `Files.isSymbolicLink(Path)`

  - ### iterateFiles

    public static Iterator<File> iterateFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)
    Iterates over the files in given directory (and optionally its subdirectories).

    The resulting iterator MUST be consumed in its entirety in order to close its underlying stream.

    All files found are filtered by an IOFileFilter.

    Parameters:
      `directory` - the directory to search in
      `fileFilter` - filter to apply when finding files.
      `dirFilter` - optional filter to apply when finding subdirectories. If this parameter is `null`, subdirectories will not be included in the search. Use TrueFileFilter.INSTANCE to match all directories.
    Returns:
      an iterator of `File` for the matching files
    Since:
      1.2
    See Also:
      - `FileFilterUtils`
      - `NameFileFilter`

  - ### iterateFiles

    public static Iterator<File> iterateFiles(File directory, String[] extensions, boolean recursive)
    Iterates over the files in a given directory (and optionally its subdirectories) which match an array of extensions.

    The resulting iterator MUST be consumed in its entirety in order to close its underlying stream.

    Parameters:
      `directory` - the directory to search in
      `extensions` - an array of extensions, for example, {"java","xml"}. If this parameter is `null`, all files are returned.
      `recursive` - if true all subdirectories are searched as well
    Returns:
      an iterator of `File` with the matching files
    Since:
      1.2

  - ### iterateFilesAndDirs

    public static Iterator<File> iterateFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)
    Iterates over the files in given directory (and optionally its subdirectories).

    The resulting iterator MUST be consumed in its entirety in order to close its underlying stream.

    All files found are filtered by an IOFileFilter.

    The resulting iterator includes the subdirectories themselves.

    Parameters:
      `directory` - the directory to search in
      `fileFilter` - filter to apply when finding files.
      `dirFilter` - optional filter to apply when finding subdirectories. If this parameter is `null`, subdirectories will not be included in the search. Use TrueFileFilter.INSTANCE to match all directories.
    Returns:
      an iterator of `File` for the matching files
    Since:
      2.2
    See Also:
      - `FileFilterUtils`
      - `NameFileFilter`

  - ### lastModified

    public static long lastModified(File file) throws IOException
    Returns the last modification time in milliseconds via `Files.getLastModifiedTime(Path, LinkOption...)`.

    For the best precision, use `lastModifiedFileTime(File)`.

    Use this method to avoid issues with `File.lastModified()` like JDK-8177809 where `File.lastModified()` is losing milliseconds (always ends in 000). This bug exists in OpenJDK 8 and 9, and is fixed in 10.

    Parameters:
      `file` - The File to query.
    Returns:
      See `FileTime.toMillis()`.
    Throws:
      `IOException` - if an I/O error occurs.
    Since:
      2.9.0

  - ### lastModifiedFileTime

    public static FileTime lastModifiedFileTime(File file) throws IOException
    Returns the last modification `FileTime` via `Files.getLastModifiedTime(Path, LinkOption...)`.

    Use this method to avoid issues with `File.lastModified()` like JDK-8177809 where `File.lastModified()` is losing milliseconds (always ends in 000). This bug exists in OpenJDK 8 and 9, and is fixed in 10.

    Parameters:
      `file` - The File to query.
    Returns:
      See `Files.getLastModifiedTime(Path, LinkOption...)`.
    Throws:
      `IOException` - if an I/O error occurs.
    Since:
      2.12.0

  - ### lastModifiedUnchecked

    public static long lastModifiedUnchecked(File file)
    Returns the last modification time in milliseconds via `Files.getLastModifiedTime(Path, LinkOption...)`.

    For the best precision, use `lastModifiedFileTime(File)`.

    Use this method to avoid issues with `File.lastModified()` like JDK-8177809 where `File.lastModified()` is losing milliseconds (always ends in 000). This bug exists in OpenJDK 8 and 9, and is fixed in 10.

    Parameters:
      `file` - The File to query.
    Returns:
      See `FileTime.toMillis()`.
    Throws:
      `UncheckedIOException` - if an I/O error occurs.
    Since:
      2.9.0

  - ### lineIterator

    public static LineIterator lineIterator(File file) throws IOException
    Returns an Iterator for the lines in a `File` using the default encoding for the VM.
    Parameters:
      `file` - the file to open for input, must not be `null`
    Returns:
      an Iterator of the lines in the file, never `null`
    Throws:
      `NullPointerException` - if file is `null`.
      `FileNotFoundException` - if the file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading.
      `IOException` - if an I/O error occurs.
    Since:
      1.3
    See Also:
      - `lineIterator(File, String)`

  - ### lineIterator

    public static LineIterator lineIterator(File file, String charsetName) throws IOException
    Returns an Iterator for the lines in a `File`.

    This method opens an `InputStream` for the file. When you have finished with the iterator you should close the stream to free internal resources. This can be done by using a try-with-resources block or calling the `LineIterator.close()` method.

    The recommended usage pattern is:

         LineIterator it = FileUtils.lineIterator(file, StandardCharsets.UTF_8.name());
         try {
           while (it.hasNext()) {
             String line = it.nextLine();
             /// do something with line
           }
         } finally {
           LineIterator.closeQuietly(iterator);
         }

    If an exception occurs during the creation of the iterator, the underlying stream is closed.

    Parameters:
      `file` - the file to open for input, must not be `null`
      `charsetName` - the name of the requested charset, `null` means platform default
    Returns:
      a LineIterator for lines in the file, never `null`; MUST be closed by the caller.
    Throws:
      `NullPointerException` - if file is `null`.
      `FileNotFoundException` - if the file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading.
      `IOException` - if an I/O error occurs.
    Since:
      1.2

  - ### listFiles

    public static Collection<File> listFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)
    Finds files within a given directory (and optionally its subdirectories). All files found are filtered by an IOFileFilter.

    If your search should recurse into subdirectories you can pass in an IOFileFilter for directories. You don't need to bind a DirectoryFileFilter (via logical AND) to this filter. This method does that for you.

    An example: If you want to search through all directories called "temp" you pass in `FileFilterUtils.NameFileFilter("temp")`

    Another common usage of this method is find files in a directory tree but ignoring the directories generated CVS. You can simply pass in `FileFilterUtils.makeCVSAware(null)`.

    Parameters:
      `directory` - the directory to search in
      `fileFilter` - filter to apply when finding files. Must not be `null`, use `TrueFileFilter.INSTANCE` to match all files in selected directories.
      `dirFilter` - optional filter to apply when finding subdirectories. If this parameter is `null`, subdirectories will not be included in the search. Use `TrueFileFilter.INSTANCE` to match all directories.
    Returns:
      a collection of `File` with the matching files
    See Also:
      - `FileFilterUtils`
      - `NameFileFilter`

  - ### listFiles

    public static Collection<File> listFiles(File directory, String[] extensions, boolean recursive)
    Lists files within a given directory (and optionally its subdirectories) which match an array of extensions.
    Parameters:
      `directory` - the directory to search in
      `extensions` - an array of extensions, for example, {"java","xml"}. If this parameter is `null`, all files are returned.
      `recursive` - if true all subdirectories are searched as well
    Returns:
      a collection of `File` with the matching files

  - ### listFilesAndDirs

    public static Collection<File> listFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)
    Finds files within a given directory (and optionally its subdirectories). All files found are filtered by an IOFileFilter.

    The resulting collection includes the starting directory and any subdirectories that match the directory filter.

    Parameters:
      `directory` - the directory to search in
      `fileFilter` - filter to apply when finding files.
      `dirFilter` - optional filter to apply when finding subdirectories. If this parameter is `null`, subdirectories will not be included in the search. Use TrueFileFilter.INSTANCE to match all directories.
    Returns:
      a collection of `File` with the matching files
    Since:
      2.2
    See Also:
      - `listFiles(java.io.File, java.io.FileFilter)`
      - `FileFilterUtils`
      - `NameFileFilter`

  - ### moveDirectory

    public static void moveDirectory(File srcDir, File destDir) throws IOException
    Moves a directory.

    When the destination directory is on another file system, do a "copy and delete".

    Parameters:
      `srcDir` - the directory to be moved.
      `destDir` - the destination directory.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `IllegalArgumentException` - if `srcDir` exists but is not a directory
      `FileNotFoundException` - if the source does not exist.
      `IOException` - if an error occurs or setting the last-modified time didn't succeed.
    Since:
      1.4

  - ### moveDirectoryToDirectory

    public static void moveDirectoryToDirectory(File source, File destDir, boolean createDestDir) throws IOException
    Moves a directory to another directory.

    If `createDestDir` is true, creates all destination parent directories, including any necessary but non-existent parent directories.

    Parameters:
      `source` - the directory to be moved.
      `destDir` - the destination file.
      `createDestDir` - If `true` create the destination directory, otherwise if `false` throw an IOException.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `IllegalArgumentException` - if the source or destination is invalid.
      `FileNotFoundException` - if the source does not exist.
      `IOException` - if the directory was not created along with all its parent directories, if enabled.
      `IOException` - if an error occurs or setting the last-modified time didn't succeed.
      `SecurityException` - See `File.mkdirs()`.
    Since:
      1.4

  - ### moveFile

    public static void moveFile(File srcFile, File destFile) throws IOException
    Moves a file preserving attributes.

    Shorthand for `moveFile(srcFile, destFile, StandardCopyOption.COPY_ATTRIBUTES)`.

    When the destination file is on another file system, do a "copy and delete".

    Parameters:
      `srcFile` - the file to be moved.
      `destFile` - the destination file.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `FileExistsException` - if the destination file exists.
      `FileNotFoundException` - if the source file does not exist.
      `IllegalArgumentException` - if `srcFile` is a directory
      `IOException` - if an error occurs.
    Since:
      1.4

  - ### moveFile

    public static void moveFile(File srcFile, File destFile, CopyOption... copyOptions) throws IOException
    Moves a file.

    When the destination file is on another file system, do a "copy and delete".

    Parameters:
      `srcFile` - the file to be moved.
      `destFile` - the destination file.
      `copyOptions` - Copy options.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `FileExistsException` - if the destination file exists.
      `FileNotFoundException` - if the source file does not exist.
      `IllegalArgumentException` - if `srcFile` is a directory
      `IOException` - if an error occurs or setting the last-modified time didn't succeed.
    Since:
      2.9.0

  - ### moveFileToDirectory

    public static void moveFileToDirectory(File srcFile, File destDir, boolean createDestDir) throws IOException
    Moves a file into a directory.

    If `createDestDir` is true, creates all destination parent directories, including any necessary but non-existent parent directories.

    Parameters:
      `srcFile` - the file to be moved.
      `destDir` - the directory to move the file into
      `createDestDir` - if `true` create the destination directory. If `false` throw an IOException if the destination directory does not already exist.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `FileExistsException` - if the destination file exists.
      `FileNotFoundException` - if the source file does not exist.
      `IOException` - if source or destination is invalid.
      `IOException` - if the directory was not created along with all its parent directories, if enabled.
      `IOException` - if an error occurs or setting the last-modified time didn't succeed.
      `SecurityException` - See `File.mkdirs()`.
      `IllegalArgumentException` - if `destDir` exists but is not a directory
    Since:
      1.4

  - ### moveToDirectory

    public static void moveToDirectory(File src, File destDir, boolean createDestDir) throws IOException
    Moves a file or directory into a destination directory.

    If `createDestDir` is true, creates all destination parent directories, including any necessary but non-existent parent directories.

    When the destination is on another file system, do a "copy and delete".

    Parameters:
      `src` - the file or directory to be moved.
      `destDir` - the destination directory.
      `createDestDir` - if `true` create the destination directory. If `false` throw an IOException if the destination directory does not already exist.
    Throws:
      `NullPointerException` - if any of the given `File`s are `null`.
      `FileExistsException` - if the directory or file exists in the destination directory.
      `FileNotFoundException` - if the source file does not exist.
      `IOException` - if source or destination is invalid.
      `IOException` - if an error occurs or setting the last-modified time didn't succeed.
    Since:
      1.4

  - ### newOutputStream

    public static OutputStream newOutputStream(File file, boolean append) throws IOException
    Creates a new OutputStream by opening or creating a file, returning an output stream that may be used to write bytes to the file.
    Parameters:
      `append` - Whether or not to append.
      `file` - the File.
    Returns:
      a new OutputStream.
    Throws:
      `IOException` - if an I/O error occurs.
    Since:
      2.12.0
    See Also:
      - `PathUtils.newOutputStream(Path, boolean)`

  - ### openInputStream

    public static FileInputStream openInputStream(File file) throws IOException
    Opens a `FileInputStream` for the specified file, providing better error messages than simply calling `new FileInputStream(file)`.

    At the end of the method either the stream will be successfully opened, or an exception will have been thrown.

    An exception is thrown if the file does not exist. An exception is thrown if the file object exists but is a directory. An exception is thrown if the file exists but cannot be read.

    Parameters:
      `file` - the file to open for input, must not be `null`
    Returns:
      a new `FileInputStream` for the specified file
    Throws:
      `NullPointerException` - if file is `null`.
      `FileNotFoundException` - if the file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading.
      `IOException` - See FileNotFoundException above, FileNotFoundException is a subclass of IOException.
    Since:
      1.3

  - ### openOutputStream

    public static FileOutputStream openOutputStream(File file) throws IOException
    Opens a `FileOutputStream` for the specified file, checking and creating the parent directory if it does not exist.

    At the end of the method either the stream will be successfully opened, or an exception will have been thrown.

    The parent directory will be created if it does not exist. The file will be created if it does not exist. An exception is thrown if the file object exists but is a directory. An exception is thrown if the file exists but cannot be written to. An exception is thrown if the parent directory cannot be created.

    Parameters:
      `file` - the file to open for output, must not be `null`
    Returns:
      a new `FileOutputStream` for the specified file
    Throws:
      `NullPointerException` - if the file object is `null`.
      `IllegalArgumentException` - if the file object is a directory
      `IllegalArgumentException` - if the file is not writable.
      `IOException` - if the directories could not be created.
    Since:
      1.3

  - ### openOutputStream

    public static FileOutputStream openOutputStream(File file, boolean append) throws IOException
    Opens a `FileOutputStream` for the specified file, checking and creating the parent directory if it does not exist.

    At the end of the method either the stream will be successfully opened, or an exception will have been thrown.

    The parent directory will be created if it does not exist. The file will be created if it does not exist. An exception is thrown if the file object exists but is a directory. An exception is thrown if the file exists but cannot be written to. An exception is thrown if the parent directory cannot be created.

    Parameters:
      `file` - the file to open for output, must not be `null`
      `append` - if `true`, then bytes will be added to the end of the file rather than overwriting
    Returns:
      a new `FileOutputStream` for the specified file
    Throws:
      `NullPointerException` - if the file object is `null`.
      `IllegalArgumentException` - if the file object is a directory
      `IOException` - if the directories could not be created, or the file is not writable
    Since:
      2.1

  - ### readFileToByteArray

    public static byte[] readFileToByteArray(File file) throws IOException
    Reads the contents of a file into a byte array. The file is always closed.
    Parameters:
      `file` - the file to read, must not be `null`
    Returns:
      the file contents, never `null`
    Throws:
      `NullPointerException` - if file is `null`.
      `IOException` - if an I/O error occurs, including when the file does not exist, is a directory rather than a regular file, or for some other reason why the file cannot be opened for reading.
    Since:
      1.1

  - ### readFileToString

    @Deprecated public static String readFileToString(File file) throws IOException
    Deprecated.
    Use `readFileToString(File, Charset)` instead (and specify the appropriate encoding)
    Reads the contents of a file into a String using the default encoding for the VM. The file is always closed.
    Parameters:
      `file` - the file to read, must not be `null`
    Returns:
      the file contents, never `null`
    Throws:
      `NullPointerException` - if file is `null`.
      `IOException` - if an I/O error occurs, including when the file does not exist, is a directory rather than a regular file, or for some other reason why the file cannot be opened for reading.
    Since:
      1.3.1

  - ### readFileToString

    public static String readFileToString(File file, Charset charsetName) throws IOException
    Reads the contents of a file into a String. The file is always closed.
    Parameters:
      `file` - the file to read, must not be `null`
      `charsetName` - the name of the requested charset, `null` means platform default
    Returns:
      the file contents, never `null`
    Throws:
      `NullPointerException` - if file is `null`.
      `IOException` - if an I/O error occurs, including when the file does not exist, is a directory rather than a regular file, or for some other reason why the file cannot be opened for reading.
    Since:
      2.3

  - ### readFileToString

    public static String readFileToString(File file, String charsetName) throws IOException
    Reads the contents of a file into a String. The file is always closed.
    Parameters:
      `file` - the file to read, must not be `null`
      `charsetName` - the name of the requested charset, `null` means platform default
    Returns:
      the file contents, never `null`
    Throws:
      `NullPointerException` - if file is `null`.
      `IOException` - if an I/O error occurs, including when the file does not exist, is a directory rather than a regular file, or for some other reason why the file cannot be opened for reading.
      `UnsupportedCharsetException` - if the named charset is unavailable.
    Since:
      2.3

  - ### readLines

    @Deprecated public static List<String> readLines(File file) throws IOException
    Deprecated.
    Use `readLines(File, Charset)` instead (and specify the appropriate encoding)
    Reads the contents of a file line by line to a List of Strings using the default encoding for the VM. The file is always closed.
    Parameters:
      `file` - the file to read, must not be `null`
    Returns:
      the list of Strings representing each line in the file, never `null`
    Throws:
      `NullPointerException` - if file is `null`.
      `IOException` - if an I/O error occurs, including when the file does not exist, is a directory rather than a regular file, or for some other reason why the file cannot be opened for reading.
    Since:
      1.3

  - ### readLines

    public static List<String> readLines(File file, Charset charset) throws IOException
    Reads the contents of a file line by line to a List of Strings. The file is always closed.
    Parameters:
      `file` - the file to read, must not be `null`
      `charset` - the charset to use, `null` means platform default
    Returns:
      the list of Strings representing each line in the file, never `null`
    Throws:
      `NullPointerException` - if file is `null`.
      `IOException` - if an I/O error occurs, including when the file does not exist, is a directory rather than a regular file, or for some other reason why the file cannot be opened for reading.
    Since:
      2.3

  - ### readLines

    public static List<String> readLines(File file, String charsetName) throws IOException
    Reads the contents of a file line by line to a List of Strings. The file is always closed.
    Parameters:
      `file` - the file to read, must not be `null`
      `charsetName` - the name of the requested charset, `null` means platform default
    Returns:
      the list of Strings representing each line in the file, never `null`
    Throws:
      `NullPointerException` - if file is `null`.
      `IOException` - if an I/O error occurs, including when the file does not exist, is a directory rather than a regular file, or for some other reason why the file cannot be opened for reading.
      `UnsupportedCharsetException` - if the named charset is unavailable.
    Since:
      1.1

  - ### sizeOf

    public static long sizeOf(File file)
    Returns the size of the specified file or directory. If the provided `File` is a regular file, then the file's length is returned. If the argument is a directory, then the size of the directory is calculated recursively. If a directory or subdirectory is security restricted, its size will not be included.

    Note that overflow is not detected, and the return value may be negative if overflow occurs. See `sizeOfAsBigInteger(File)` for an alternative method that does not overflow.

    Parameters:
      `file` - the regular file or directory to return the size of (must not be `null`).
    Returns:
      the length of the file, or recursive size of the directory, provided (in bytes).
    Throws:
      `NullPointerException` - if the file is `null`.
      `IllegalArgumentException` - if the file does not exist.
      `UncheckedIOException` - if an IO error occurs.
    Since:
      2.0

  - ### sizeOfAsBigInteger

    public static BigInteger sizeOfAsBigInteger(File file)
    Returns the size of the specified file or directory. If the provided `File` is a regular file, then the file's length is returned. If the argument is a directory, then the size of the directory is calculated recursively. If a directory or subdirectory is security restricted, its size will not be included.
    Parameters:
      `file` - the regular file or directory to return the size of (must not be `null`).
    Returns:
      the length of the file, or recursive size of the directory, provided (in bytes).
    Throws:
      `NullPointerException` - if the file is `null`.
      `IllegalArgumentException` - if the file does not exist.
      `UncheckedIOException` - if an IO error occurs.
    Since:
      2.4

  - ### sizeOfDirectory

    public static long sizeOfDirectory(File directory)
    Counts the size of a directory recursively (sum of the length of all files).

    Note that overflow is not detected, and the return value may be negative if overflow occurs. See `sizeOfDirectoryAsBigInteger(File)` for an alternative method that does not overflow.

    Parameters:
      `directory` - directory to inspect, must not be `null`.
    Returns:
      size of directory in bytes, 0 if directory is security restricted, a negative number when the real total is greater than `Long.MAX_VALUE`.
    Throws:
      `IllegalArgumentException` - if the given `File` exists but is not a directory
      `NullPointerException` - if the directory is `null`.
      `UncheckedIOException` - if an IO error occurs.

  - ### sizeOfDirectoryAsBigInteger

    public static BigInteger sizeOfDirectoryAsBigInteger(File directory)
    Counts the size of a directory recursively (sum of the length of all files).
    Parameters:
      `directory` - directory to inspect, must not be `null`.
    Returns:
      size of directory in bytes, 0 if directory is security restricted.
    Throws:
      `IllegalArgumentException` - if the given `File` exists but is not a directory
      `NullPointerException` - if the directory is `null`.
      `UncheckedIOException` - if an IO error occurs.
    Since:
      2.4

  - ### streamFiles

    public static Stream<File> streamFiles(File directory, boolean recursive, String... extensions) throws IOException
    Streams over the files in a given directory (and optionally its subdirectories) which match an array of extensions.

    The returned `Stream` may wrap one or more `DirectoryStream`s. When you require timely disposal of file system resources, use a `try`-with-resources block to ensure invocation of the stream's `BaseStream.close()` method after the stream operations are completed. Calling a closed stream causes a `IllegalStateException`.

    Parameters:
      `directory` - the directory to search in
      `recursive` - if true all subdirectories are searched as well
      `extensions` - an array of extensions, for example, {"java","xml"}. If this parameter is `null`, all files are returned.
    Returns:
      a Stream of `File` for matching files.
    Throws:
      `IOException` - if an I/O error is thrown when accessing the starting file.
    Since:
      2.9.0

  - ### toFile

    public static File toFile(URL url)
    Converts from a `URL` to a `File`.

    Syntax such as `file:///my%20docs/file.txt` will be correctly decoded to `/my docs/file.txt`. UTF-8 is used to decode percent-encoded octets to characters. Additionally, malformed percent-encoded octets are handled leniently by passing them through literally.

    Parameters:
      `url` - the file URL to convert, `null` returns `null`
    Returns:
      the equivalent `File` object, or `null` if the URL's protocol is not `file`

  - ### toFiles

    public static File[] toFiles(URL... urls)
    Converts each of an array of `URL` to a `File`.

    Returns an array of the same size as the input. If the input is `null`, an empty array is returned. If the input contains `null`, the output array contains `null` at the same index.

    This method will decode the URL. Syntax such as `file:///my%20docs/file.txt` will be correctly decoded to `/my docs/file.txt`.

    Parameters:
      `urls` - the file URLs to convert, `null` returns empty array
    Returns:
      a non-`null` array of Files matching the input, with a `null` item if there was a `null` at that index in the input array
    Throws:
      `IllegalArgumentException` - if any file is not a URL file
      `IllegalArgumentException` - if any file is incorrectly encoded
    Since:
      1.1

  - ### touch

    public static void touch(File file) throws IOException
    Implements behavior similar to the UNIX "touch" utility. Creates a new file with size 0, or, if the file exists, just updates the file's modified time. This method throws an IOException if the last modified date of the file cannot be set. It creates parent directories if they do not exist.
    Parameters:
      `file` - the File to touch.
    Throws:
      `NullPointerException` - if the parameter is `null`.
      `IOException` - if setting the last-modified time failed or an I/O problem occurs.

  - ### toURLs

    public static URL[] toURLs(File... files) throws IOException
    Converts each element of an array of `File` to a `URL`.

    Returns an array of the same size as the input.

    Parameters:
      `files` - the files to convert, must not be `null`
    Returns:
      an array of URLs matching the input
    Throws:
      `IOException` - if a file cannot be converted
      `NullPointerException` - if any argument is null

  - ### waitFor

    public static boolean waitFor(File file, int seconds)
    Waits for the file system to detect a file's presence, with a timeout.

    This method repeatedly tests `Files.exists(Path, LinkOption...)` until it returns true up to the maximum time specified in seconds.

    Parameters:
      `file` - the file to check, must not be `null`
      `seconds` - the maximum time in seconds to wait
    Returns:
      true if file exists
    Throws:
      `NullPointerException` - if the file is `null`

  - ### write

    @Deprecated public static void write(File file, CharSequence data) throws IOException
    Deprecated.
    Use `write(File, CharSequence, Charset)` instead (and specify the appropriate encoding)
    Writes a CharSequence to a file creating the file if it does not exist using the default encoding for the VM.
    Parameters:
      `file` - the file to write
      `data` - the content to write to the file
    Throws:
      `IOException` - in case of an I/O error
    Since:
      2.0

  - ### write

    @Deprecated public static void write(File file, CharSequence data, boolean append) throws IOException
    Deprecated.
    Use `write(File, CharSequence, Charset, boolean)` instead (and specify the appropriate encoding)
    Writes a CharSequence to a file creating the file if it does not exist using the default encoding for the VM.
    Parameters:
      `file` - the file to write
      `data` - the content to write to the file
      `append` - if `true`, then the data will be added to the end of the file rather than overwriting
    Throws:
      `IOException` - in case of an I/O error
    Since:
      2.1

  - ### write

    public static void write(File file, CharSequence data, Charset charset) throws IOException
    Writes a CharSequence to a file creating the file if it does not exist.
    Parameters:
      `file` - the file to write
      `data` - the content to write to the file
      `charset` - the name of the requested charset, `null` means platform default
    Throws:
      `IOException` - in case of an I/O error
    Since:
      2.3

  - ### write

    public static void write(File file, CharSequence data, Charset charset, boolean append) throws IOException
    Writes a CharSequence to a file creating the file if it does not exist.
    Parameters:
      `file` - the file to write
      `data` - the content to write to the file
      `charset` - the charset to use, `null` means platform default
      `append` - if `true`, then the data will be added to the end of the file rather than overwriting
    Throws:
      `IOException` - in case of an I/O error
    Since:
      2.3

  - ### write

    public static void write(File file, CharSequence data, String charsetName) throws IOException
    Writes a CharSequence to a file creating the file if it does not exist.
    Parameters:
      `file` - the file to write
      `data` - the content to write to the file
      `charsetName` - the name of the requested charset, `null` means platform default
    Throws:
      `IOException` - in case of an I/O error
      `UnsupportedEncodingException` - if the encoding is not supported by the VM
    Since:
      2.0

  - ### write

    public static void write(File file, CharSequence data, String charsetName, boolean append) throws IOException
    Writes a CharSequence to a file creating the file if it does not exist.
    Parameters:
      `file` - the file to write
      `data` - the content to write to the file
      `charsetName` - the name of the requested charset, `null` means platform default
      `append` - if `true`, then the data will be added to the end of the file rather than overwriting
    Throws:
      `IOException` - in case of an I/O error
      `UnsupportedCharsetException` - if the encoding is not supported by the VM
    Since:
      2.1

  - ### writeByteArrayToFile

    public static void writeByteArrayToFile(File file, byte[] data) throws IOException
    Writes a byte array to a file creating the file if it does not exist. The parent directories of the file will be created if they do not exist.
    Parameters:
      `file` - the file to write to
      `data` - the content to write to the file
    Throws:
      `IOException` - in case of an I/O error
    Since:
      1.1

  - ### writeByteArrayToFile

    public static void writeByteArrayToFile(File file, byte[] data, boolean append) throws IOException
    Writes a byte array to a file creating the file if it does not exist.
    Parameters:
      `file` - the file to write to
      `data` - the content to write to the file
      `append` - if `true`, then bytes will be added to the end of the file rather than overwriting
    Throws:
      `IOException` - in case of an I/O error
    Since:
      2.1

  - ### writeByteArrayToFile

    public static void writeByteArrayToFile(File file, byte[] data, int off, int len) throws IOException
    Writes `len` bytes from the specified byte array starting at offset `off` to a file, creating the file if it does not exist.
    Parameters:
      `file` - the file to write to
      `data` - the content to write to the file
      `off` - the start offset in the data
      `len` - the number of bytes to write
    Throws:
      `IOException` - in case of an I/O error
    Since:
      2.5

  - ### writeByteArrayToFile

    public static void writeByteArrayToFile(File file, byte[] data, int off, int len, boolean append) throws IOException
    Writes `len` bytes from the specified byte array starting at offset `off` to a file, creating the file if it does not exist.
    Parameters:
      `file` - the file to write to
      `data` - the content to write to the file
      `off` - the start offset in the data
      `len` - the number of bytes to write
      `append` - if `true`, then bytes will be added to the end of the file rather than overwriting
    Throws:
      `IOException` - in case of an I/O error
    Since:
      2.5

  - ### writeLines

    public static void writeLines(File file, Collection<?> lines) throws IOException
    Writes the `toString()` value of each item in a collection to the specified `File` line by line. The default VM encoding and the default line ending will be used.
    Parameters:
      `file` - the file to write to
      `lines` - the lines to write, `null` entries produce blank lines
    Throws:
      `IOException` - in case of an I/O error
    Since:
      1.3

  - ### writeLines

    public static void writeLines(File file, Collection<?> lines, boolean append) throws IOException
    Writes the `toString()` value of each item in a collection to the specified `File` line by line. The default VM encoding and the default line ending will be used.
    Parameters:
      `file` - the file to write to
      `lines` - the lines to write, `null` entries produce blank lines
      `append` - if `true`, then the lines will be added to the end of the file rather than overwriting
    Throws:
      `IOException` - in case of an I/O error
    Since:
      2.1

  - ### writeLines

    public static void writeLines(File file, Collection<?> lines, String lineEnding) throws IOException
    Writes the `toString()` value of each item in a collection to the specified `File` line by line. The default VM encoding and the specified line ending will be used.
    Parameters:
      `file` - the file to write to
      `lines` - the lines to write, `null` entries produce blank lines
      `lineEnding` - the line separator to use, `null` is system default
    Throws:
      `IOException` - in case of an I/O error
    Since:
      1.3

  - ### writeLines

    public static void writeLines(File file, Collection<?> lines, String lineEnding, boolean append) throws IOException
    Writes the `toString()` value of each item in a collection to the specified `File` line by line. The default VM encoding and the specified line ending will be used.
    Parameters:
      `file` - the file to write to
      `lines` - the lines to write, `null` entries produce blank lines
      `lineEnding` - the line separator to use, `null` is system default
      `append` - if `true`, then the lines will be added to the end of the file rather than overwriting
    Throws:
      `IOException` - in case of an I/O error
    Since:
      2.1

  - ### writeLines

    public static void writeLines(File file, String charsetName, Collection<?> lines) throws IOException
    Writes the `toString()` value of each item in a collection to the specified `File` line by line. The specified character encoding and the default line ending will be used. The parent directories of the file will be created if they do not exist.
    Parameters:
      `file` - the file to write to
      `charsetName` - the name of the requested charset, `null` means platform default
      `lines` - the lines to write, `null` entries produce blank lines
    Throws:
      `IOException` - in case of an I/O error
      `UnsupportedEncodingException` - if the encoding is not supported by the VM
    Since:
      1.1

  - ### writeLines

    public static void writeLines(File file, String charsetName, Collection<?> lines, boolean append) throws IOException
    Writes the `toString()` value of each item in a collection to the specified `File` line by line, optionally appending. The specified character encoding and the default line ending will be used.
    Parameters:
      `file` - the file to write to
      `charsetName` - the name of the requested charset, `null` means platform default
      `lines` - the lines to write, `null` entries produce blank lines
      `append` - if `true`, then the lines will be added to the end of the file rather than overwriting
    Throws:
      `IOException` - in case of an I/O error
      `UnsupportedEncodingException` - if the encoding is not supported by the VM
    Since:
      2.1

  - ### writeLines

    public static void writeLines(File file, String charsetName, Collection<?> lines, String lineEnding) throws IOException
    Writes the `toString()` value of each item in a collection to the specified `File` line by line. The specified character encoding and the line ending will be used. The parent directories of the file will be created if they do not exist.
    Parameters:
      `file` - the file to write to
      `charsetName` - the name of the requested charset, `null` means platform default
      `lines` - the lines to write, `null` entries produce blank lines
      `lineEnding` - the line separator to use, `null` is system default
    Throws:
      `IOException` - in case of an I/O error
      `UnsupportedEncodingException` - if the encoding is not supported by the VM
    Since:
      1.1

  - ### writeLines

    public static void writeLines(File file, String charsetName, Collection<?> lines, String lineEnding, boolean append) throws IOException
    Writes the `toString()` value of each item in a collection to the specified `File` line by line. The specified character encoding and the line ending will be used.
    Parameters:
      `file` - the file to write to
      `charsetName` - the name of the requested charset, `null` means platform default
      `lines` - the lines to write, `null` entries produce blank lines
      `lineEnding` - the line separator to use, `null` is system default
      `append` - if `true`, then the lines will be added to the end of the file rather than overwriting
    Throws:
      `IOException` - in case of an I/O error
      `UnsupportedEncodingException` - if the encoding is not supported by the VM
    Since:
      2.1

  - ### writeStringToFile

    @Deprecated public static void writeStringToFile(File file, String data) throws IOException
    Deprecated.
    Use `writeStringToFile(File, String, Charset)` instead (and specify the appropriate encoding)
    Writes a String to a file creating the file if it does not exist using the default encoding for the VM.
    Parameters:
      `file` - the file to write
      `data` - the content to write to the file
    Throws:
      `IOException` - in case of an I/O error

  - ### writeStringToFile

    @Deprecated public static void writeStringToFile(File file, String data, boolean append) throws IOException
    Deprecated.
    Use `writeStringToFile(File, String, Charset, boolean)` instead (and specify the appropriate encoding)
    Writes a String to a file creating the file if it does not exist using the default encoding for the VM.
    Parameters:
      `file` - the file to write
      `data` - the content to write to the file
      `append` - if `true`, then the String will be added to the end of the file rather than overwriting
    Throws:
      `IOException` - in case of an I/O error
    Since:
      2.1

  - ### writeStringToFile

    public static void writeStringToFile(File file, String data, Charset charset) throws IOException
    Writes a String to a file creating the file if it does not exist. The parent directories of the file will be created if they do not exist.
    Parameters:
      `file` - the file to write
      `data` - the content to write to the file
      `charset` - the charset to use, `null` means platform default
    Throws:
      `IOException` - in case of an I/O error
      `UnsupportedEncodingException` - if the encoding is not supported by the VM
    Since:
      2.4

  - ### writeStringToFile

    public static void writeStringToFile(File file, String data, Charset charset, boolean append) throws IOException
    Writes a String to a file, creating the file if it does not exist. The parent directories of the file are created if they do not exist.
    Parameters:
      `file` - the file to write
      `data` - the content to write to the file
      `charset` - the charset to use, `null` means platform default
      `append` - if `true`, then the String will be added to the end of the file rather than overwriting
    Throws:
      `IOException` - in case of an I/O error
    Since:
      2.3

  - ### writeStringToFile

    public static void writeStringToFile(File file, String data, String charsetName) throws IOException
    Writes a String to a file, creating the file if it does not exist. The parent directories of the file are created if they do not exist.
    Parameters:
      `file` - the file to write
      `data` - the content to write to the file
      `charsetName` - the name of the requested charset, `null` means platform default
    Throws:
      `IOException` - in case of an I/O error
      `UnsupportedEncodingException` - if the encoding is not supported by the VM

  - ### writeStringToFile

    public static void writeStringToFile(File file, String data, String charsetName, boolean append) throws IOException
    Writes a String to a file, creating the file if it does not exist. The parent directories of the file are created if they do not exist.
    Parameters:
      `file` - the file to write
      `data` - the content to write to the file
      `charsetName` - the name of the requested charset, `null` means platform default
      `append` - if `true`, then the String will be added to the end of the file rather than overwriting
    Throws:
      `IOException` - in case of an I/O error
      `UnsupportedCharsetException` - if the encoding is not supported by the VM
    Since:
      2.1