Class FileUtils

java.lang.Object
org.eclipse.jgit.util.FileUtils

public class FileUtils extends Object
File Utilities
  • Field Details

    • LOG

      private static final org.slf4j.Logger LOG
    • RNG

      private static final Random RNG
    • NONE

      public static final int NONE
      Option to delete given File
      See Also:
    • RECURSIVE

      public static final int RECURSIVE
      Option to recursively delete given File
      See Also:
    • RETRY

      public static final int RETRY
      Option to retry deletion if not successful
      See Also:
    • SKIP_MISSING

      public static final int SKIP_MISSING
      Option to skip deletion if file doesn't exist
      See Also:
    • IGNORE_ERRORS

      public static final int IGNORE_ERRORS
      Option not to throw exceptions when a deletion finally doesn't succeed.
      Since:
      2.0
      See Also:
    • EMPTY_DIRECTORIES_ONLY

      public static final int EMPTY_DIRECTORIES_ONLY
      Option to only delete empty directories. This option can be combined with RECURSIVE
      Since:
      3.0
      See Also:
  • Constructor Details

    • FileUtils

      public FileUtils()
  • Method Details

    • toPath

      public static Path toPath(File f) throws IOException
      Safe conversion from File to Path.
      Parameters:
      f - File to be converted to Path
      Returns:
      the path represented by the file
      Throws:
      IOException - in case the path represented by the file is not valid ( InvalidPathException)
      Since:
      4.10
    • delete

      public static void delete(File f) throws IOException
      Delete file or empty folder
      Parameters:
      f - File to be deleted
      Throws:
      IOException - if deletion of f fails. This may occur if f didn't exist when the method was called. This can therefore cause java.io.IOExceptions during race conditions when multiple concurrent threads all try to delete the same file.
    • delete

      public static void delete(File f, int options) throws IOException
      Delete file or folder
      Parameters:
      f - File to be deleted
      options - deletion options, RECURSIVE for recursive deletion of a subtree, RETRY to retry when deletion failed. Retrying may help if the underlying file system doesn't allow deletion of files being read by another thread.
      Throws:
      IOException - if deletion of f fails. This may occur if f didn't exist when the method was called. This can therefore cause java.io.IOExceptions during race conditions when multiple concurrent threads all try to delete the same file. This exception is not thrown when IGNORE_ERRORS is set.
    • handleDeleteException

      private static void handleDeleteException(File f, IOException e, int allOptions, int checkOptions) throws IOException
      Throws:
      IOException
    • rename

      public static void rename(File src, File dst) throws IOException
      Rename a file or folder. If the rename fails and if we are running on a filesystem where it makes sense to repeat a failing rename then repeat the rename operation up to 9 times with 100ms sleep time between two calls. Furthermore if the destination exists and is directory hierarchy with only directories in it, the whole directory hierarchy will be deleted. If the target represents a non-empty directory structure, empty subdirectories within that structure may or may not be deleted even if the method fails. Furthermore if the destination exists and is a file then the file will be deleted and then the rename is retried.

      This operation is not atomic.

      Parameters:
      src - the old File
      dst - the new File
      Throws:
      IOException - if the rename has failed
      Since:
      3.0
      See Also:
    • rename

      public static void rename(File src, File dst, CopyOption... options) throws AtomicMoveNotSupportedException, IOException
      Rename a file or folder using the passed CopyOptions. If the rename fails and if we are running on a filesystem where it makes sense to repeat a failing rename then repeat the rename operation up to 9 times with 100ms sleep time between two calls. Furthermore if the destination exists and is a directory hierarchy with only directories in it, the whole directory hierarchy will be deleted. If the target represents a non-empty directory structure, empty subdirectories within that structure may or may not be deleted even if the method fails. Furthermore if the destination exists and is a file then the file will be replaced if StandardCopyOption.REPLACE_EXISTING has been set. If StandardCopyOption.ATOMIC_MOVE has been set the rename will be done atomically or fail with an AtomicMoveNotSupportedException
      Parameters:
      src - the old file
      dst - the new file
      options - options to pass to Files.move(java.nio.file.Path, java.nio.file.Path, CopyOption...)
      Throws:
      AtomicMoveNotSupportedException - if file cannot be moved as an atomic file system operation
      IOException
      Since:
      4.1
    • mkdir

      public static void mkdir(File d) throws IOException
      Creates the directory named by this abstract pathname.
      Parameters:
      d - directory to be created
      Throws:
      IOException - if creation of d fails. This may occur if d did exist when the method was called. This can therefore cause java.io.IOExceptions during race conditions when multiple concurrent threads all try to create the same directory.
    • mkdir

      public static void mkdir(File d, boolean skipExisting) throws IOException
      Creates the directory named by this abstract pathname.
      Parameters:
      d - directory to be created
      skipExisting - if true skip creation of the given directory if it already exists in the file system
      Throws:
      IOException - if creation of d fails. This may occur if d did exist when the method was called. This can therefore cause java.io.IOExceptions during race conditions when multiple concurrent threads all try to create the same directory.
    • mkdirs

      public static void mkdirs(File d) throws IOException
      Creates the directory named by this abstract pathname, including any necessary but nonexistent parent directories. Note that if this operation fails it may have succeeded in creating some of the necessary parent directories.
      Parameters:
      d - directory to be created
      Throws:
      IOException - if creation of d fails. This may occur if d did exist when the method was called. This can therefore cause java.io.IOExceptions during race conditions when multiple concurrent threads all try to create the same directory.
    • mkdirs

      public static void mkdirs(File d, boolean skipExisting) throws IOException
      Creates the directory named by this abstract pathname, including any necessary but nonexistent parent directories. Note that if this operation fails it may have succeeded in creating some of the necessary parent directories.
      Parameters:
      d - directory to be created
      skipExisting - if true skip creation of the given directory if it already exists in the file system
      Throws:
      IOException - if creation of d fails. This may occur if d did exist when the method was called. This can therefore cause java.io.IOExceptions during race conditions when multiple concurrent threads all try to create the same directory.
    • createNewFile

      public static void createNewFile(File f) throws IOException
      Atomically creates a new, empty file named by this abstract pathname if and only if a file with this name does not yet exist. The check for the existence of the file and the creation of the file if it does not exist are a single operation that is atomic with respect to all other filesystem activities that might affect the file.

      Note: this method should not be used for file-locking, as the resulting protocol cannot be made to work reliably. The FileLock facility should be used instead.

      Parameters:
      f - the file to be created
      Throws:
      IOException - if the named file already exists or if an I/O error occurred
    • createSymLink

      public static Path createSymLink(File path, String target) throws IOException
      Create a symbolic link
      Parameters:
      path - the path of the symbolic link to create
      target - the target of the symbolic link
      Returns:
      the path to the symbolic link
      Throws:
      IOException
      Since:
      4.2
    • readSymLink

      public static String readSymLink(File path) throws IOException
      Read target path of the symlink.
      Parameters:
      path - a File object.
      Returns:
      target path of the symlink, or null if it is not a symbolic link
      Throws:
      IOException
      Since:
      3.0
    • createTempDir

      public static File createTempDir(String prefix, String suffix, File dir) throws IOException
      Create a temporary directory.
      Parameters:
      prefix - prefix string
      suffix - suffix string
      dir - The parent dir, can be null to use system default temp dir.
      Returns:
      the temp dir created.
      Throws:
      IOException
      Since:
      3.4
    • relativizeNativePath

      public static String relativizeNativePath(String base, String other)
      Expresses other as a relative file path from base. File-separator and case sensitivity are based on the current file system. See also relativizePath(String, String, String, boolean).
      Parameters:
      base - Base path
      other - Destination path
      Returns:
      Relative path from base to other
      Since:
      4.8
    • relativizeGitPath

      public static String relativizeGitPath(String base, String other)
      Expresses other as a relative file path from base. File-separator and case sensitivity are based on Git's internal representation of files (which matches Unix). See also relativizePath(String, String, String, boolean).
      Parameters:
      base - Base path
      other - Destination path
      Returns:
      Relative path from base to other
      Since:
      4.8
    • relativizePath

      public static String relativizePath(String base, String other, String dirSeparator, boolean caseSensitive)
      Expresses other as a relative file path from base

      For example, if called with the two following paths :

       base = "c:\\Users\\jdoe\\eclipse\\git\\project"
       other = "c:\\Users\\jdoe\\eclipse\\git\\another_project\\pom.xml"
       
      This will return "..\\another_project\\pom.xml".

      Note that this will return the empty String if base and other are equal.

      Parameters:
      base - The path against which other should be relativized. This will be assumed to denote the path to a folder and not a file.
      other - The path that will be made relative to base.
      dirSeparator - A string that separates components of the path. In practice, this is "/" or "\\".
      caseSensitive - Whether to consider differently-cased directory names as distinct
      Returns:
      A relative path that, when resolved against base, will yield the original other.
      Since:
      4.8
    • isStaleFileHandle

      public static boolean isStaleFileHandle(IOException ioe)
      Determine if an IOException is a Stale NFS File Handle
      Parameters:
      ioe - an IOException object.
      Returns:
      a boolean true if the IOException is a Stale NFS FIle Handle
      Since:
      4.1
    • isStaleFileHandleInCausalChain

      public static boolean isStaleFileHandleInCausalChain(Throwable throwable)
      Determine if a throwable or a cause in its causal chain is a Stale NFS File Handle
      Parameters:
      throwable - a Throwable object.
      Returns:
      a boolean true if the throwable or a cause in its causal chain is a Stale NFS File Handle
      Since:
      4.7
    • isSymlink

      static boolean isSymlink(File file)
      Parameters:
      file -
      Returns:
      true if the passed file is a symbolic link
    • lastModified

      @Deprecated static long lastModified(File file) throws IOException
      Deprecated.
      use lastModifiedInstant(Path) instead which returns FileTime
      Parameters:
      file -
      Returns:
      lastModified attribute for given file, not following symbolic links
      Throws:
      IOException
    • lastModifiedInstant

      static Instant lastModifiedInstant(Path path)
      Parameters:
      path -
      Returns:
      lastModified attribute for given file, not following symbolic links
    • fileAttributes

      static BasicFileAttributes fileAttributes(File file) throws IOException
      Return all the attributes of a file, without following symbolic links.
      Parameters:
      file -
      Returns:
      BasicFileAttributes of the file
      Throws:
      IOException - in case of any I/O errors accessing the file
      Since:
      4.5.6
    • setLastModified

      @Deprecated static void setLastModified(File file, long time) throws IOException
      Deprecated.
      Set the last modified time of a file system object.
      Parameters:
      file -
      time -
      Throws:
      IOException
    • setLastModified

      static void setLastModified(Path path, Instant time) throws IOException
      Set the last modified time of a file system object.
      Parameters:
      path -
      time -
      Throws:
      IOException
    • exists

      static boolean exists(File file)
      Parameters:
      file -
      Returns:
      true if the given file exists, not following symbolic links
    • isHidden

      static boolean isHidden(File file) throws IOException
      Parameters:
      file -
      Returns:
      true if the given file is hidden
      Throws:
      IOException
    • setHidden

      public static void setHidden(File file, boolean hidden) throws IOException
      Set a file hidden (on Windows)
      Parameters:
      file - a File object.
      hidden - a boolean.
      Throws:
      IOException
      Since:
      4.1
    • getLength

      public static long getLength(File file) throws IOException
      Get file length
      Parameters:
      file - a File.
      Returns:
      length of the given file
      Throws:
      IOException
      Since:
      4.1
    • isDirectory

      static boolean isDirectory(File file)
      Parameters:
      file -
      Returns:
      true if the given file is a directory, not following symbolic links
    • isFile

      static boolean isFile(File file)
      Parameters:
      file -
      Returns:
      true if the given file is a file, not following symbolic links
    • hasFiles

      public static boolean hasFiles(Path dir) throws IOException
      Whether the path is a directory with files in it.
      Parameters:
      dir - directory path
      Returns:
      true if the given directory path contains files
      Throws:
      IOException - on any I/O errors accessing the path
      Since:
      5.11
    • canExecute

      public static boolean canExecute(File file)
      Whether the given file can be executed.
      Parameters:
      file - a File object.
      Returns:
      true if the given file can be executed.
      Since:
      4.1
    • getFileAttributesBasic

      static FS.Attributes getFileAttributesBasic(FS fs, File file)
      Parameters:
      fs -
      file -
      Returns:
      non null attributes object
    • getFileAttributesPosix

      public static FS.Attributes getFileAttributesPosix(FS fs, File file)
      Get file system attributes for the given file.
      Parameters:
      fs - a FS object.
      file - a File.
      Returns:
      file system attributes for the given file.
      Since:
      4.1
    • normalize

      public static File normalize(File file)
      NFC normalize a file (on Mac), otherwise do nothing
      Parameters:
      file - a File.
      Returns:
      on Mac: NFC normalized File, otherwise the passed file
      Since:
      4.1
    • normalize

      public static String normalize(String name)
      On Mac: get NFC normalized form of given name, otherwise the given name.
      Parameters:
      name - a String object.
      Returns:
      on Mac: NFC normalized form of given name
      Since:
      4.1
    • canonicalize

      public static File canonicalize(File file)
      Best-effort variation of File.getCanonicalFile() returning the input file if the file cannot be canonicalized instead of throwing IOException.
      Parameters:
      file - to be canonicalized; may be null
      Returns:
      canonicalized file, or the unchanged input file if canonicalization failed or if file == null
      Throws:
      SecurityException - if File.getCanonicalFile() throws one
      Since:
      4.2
    • pathToString

      public static String pathToString(File file)
      Convert a path to String, replacing separators as necessary.
      Parameters:
      file - a File.
      Returns:
      file's path as a String
      Since:
      4.10
    • touch

      public static void touch(Path f) throws IOException
      Touch the given file
      Parameters:
      f - the file to touch
      Throws:
      IOException
      Since:
      5.1.8
    • delay

      public static long delay(long last, long min, long max)
      Compute a delay in a min..max interval with random jitter.
      Parameters:
      last - amount of delay waited before the last attempt. This is used to seed the next delay interval. Should be 0 if there was no prior delay.
      min - shortest amount of allowable delay between attempts.
      max - longest amount of allowable delay between attempts.
      Returns:
      new amount of delay to wait before the next attempt.
      Since:
      5.6