Class FileUtils

java.lang.Object
com.therouter.plugin.utils.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.

Origin of code: Excalibur, Alexandria, Commons-Utils

  • Field Details

    • ONE_KB

      public static final long ONE_KB
      The number of bytes in a kilobyte.
      See Also:
    • ONE_MB

      public static final long ONE_MB
      The number of bytes in a megabyte.
      See Also:
  • Constructor Details

    • FileUtils

      public FileUtils()
      Instances should NOT be constructed in standard programming.
  • Method Details

    • 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:
      IOException - if the file object is a directory
      IOException - if the file cannot be written to
      IOException - if a parent directory needs creating but that fails
      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:
      IOException - if the file object is a directory
      IOException - if the file cannot be written to
      IOException - if a parent directory needs creating but that fails
      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 File.setLastModified(long), however it is not guaranteed that the operation will succeed. If the modification operation fails, no indication is provided.

      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 source or destination is null
      IOException - if source or destination is invalid
      IOException - if an IO error occurs during copying
      See Also:
    • copyFileToDirectory

      public static void copyFileToDirectory(File srcFile, File destDir, 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 File.setLastModified(long), however it is not guaranteed that the operation will succeed. If the modification operation fails, no indication is provided.

      Parameters:
      srcFile - an existing file to copy, must not be null
      destDir - 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 source or destination is null
      IOException - if source or destination is invalid
      IOException - if an IO error occurs during copying
      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

      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 will overwrite it.

      Note: This method tries to preserve the file's last modified date/times using File.setLastModified(long), however it is not guaranteed that the operation will succeed. If the modification operation fails, no indication is provided.

      Parameters:
      srcFile - an existing file to copy, must not be null
      destFile - the new file, must not be null
      Throws:
      NullPointerException - if source or destination is null
      IOException - if source or destination is invalid
      IOException - if an IO error occurs during copying
      IOException - if the output file length is not the same as the input file length after the copy completes
      See Also:
    • copyFile

      public static void copyFile(File srcFile, File destFile, boolean preserveFileDate) 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, then this method will overwrite it.

      Note: Setting preserveFileDate to true tries to preserve the file's last modified date/times using File.setLastModified(long), however it is not guaranteed that the operation will succeed. If the modification operation fails, no indication is provided.

      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 source or destination is null
      IOException - if source or destination is invalid
      IOException - if an IO error occurs during copying
      IOException - if the output file length is not the same as the input file length after the copy completes
      See Also:
    • 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.

      The destination directory is created if it does not exist. If the destination directory did 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, no indication is provided.

      Parameters:
      srcDir - an existing directory to copy, must not be null
      destDir - the new directory, must not be null
      Throws:
      NullPointerException - if source or destination is null
      IOException - if source or destination is invalid
      IOException - if an IO error occurs during copying
      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 did 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, no indication is provided.

      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:
      NullPointerException - if source or destination is null
      IOException - if source or destination is invalid
      IOException - if an IO error occurs during copying
      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 did 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, no indication is provided.

        // only copy the directory structure
        FileUtils.copyDirectory(srcDir, destDir, DirectoryFileFilter.DIRECTORY);
        
        // Create a filter for ".txt" files
        IOFileFilter txtSuffixFilter = FileFilterUtils.suffixFileFilter(".txt");
        IOFileFilter txtFiles = FileFilterUtils.andFileFilter(FileFileFilter.FILE, 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 source or destination is null
      IOException - if source or destination is invalid
      IOException - if an IO error occurs during copying
      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 did 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, no indication is provided.

        // only copy the directory structure
        FileUtils.copyDirectory(srcDir, destDir, DirectoryFileFilter.DIRECTORY, false);
        
        // Create a filter for ".txt" files
        IOFileFilter txtSuffixFilter = FileFilterUtils.suffixFileFilter(".txt");
        IOFileFilter txtFiles = FileFilterUtils.andFileFilter(FileFileFilter.FILE, 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 source or destination is null
      IOException - if source or destination is invalid
      IOException - if an IO error occurs during copying
      Since:
      1.4
    • 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
      IllegalArgumentException - if directory does not exist or is not a directory
    • cleanDirectory

      public static void cleanDirectory(File directory) throws IOException
      Cleans a directory without deleting it.
      Parameters:
      directory - directory to clean
      Throws:
      IOException - in case cleaning is unsuccessful
      IllegalArgumentException - if directory does not exist or is not a directory
    • forceDelete

      public static void forceDelete(File file) throws IOException
      Deletes a file. If file is a directory, delete it and all sub-directories.

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

      • A directory to be deleted does not have to be empty.
      • You get exceptions when a file or directory cannot be deleted. (java.io.File methods returns a boolean)
      Parameters:
      file - file or directory to delete, must not be null
      Throws:
      NullPointerException - if the directory 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 sub-directories.
      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
      Makes a directory, including any necessary but nonexistent parent directories. If a file already exists with specified name but it is not a directory then an IOException is thrown. If the directory cannot be created (or does not already exist) then an IOException is thrown.
      Parameters:
      directory - directory to create, must not be null
      Throws:
      NullPointerException - if the directory is null
      IOException - if the directory cannot be created or the file already exists but is not a directory
    • isSymlink

      public static boolean isSymlink(File file) throws IOException
      Throws:
      IOException