Class FileUtils


  • public final class FileUtils
    extends java.lang.Object
    File utilities.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private static java.lang.reflect.Method attachmentMethod
      The attachment() method.
      private static java.lang.reflect.Method cleanerCleanMethod
      The Cleaner.clean() method.
      private static java.lang.String currDirPath
      The current directory path (only reads the current directory once, the first time this field is accessed, so will not reflect subsequent changes to the current directory).
      private static java.lang.reflect.Method directByteBufferCleanerMethod
      The DirectByteBuffer.cleaner() method.
      private static java.util.concurrent.atomic.AtomicBoolean initialized
      True if class' static fields have been initialized.
      static int MAX_BUFFER_SIZE
      The maximum size of a file buffer array.
      private static java.lang.Object theUnsafe
      The Unsafe object.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private FileUtils()
      Constructor.
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static boolean canRead​(java.io.File file)
      Check if a File exists and can be read.
      static boolean canRead​(java.nio.file.Path path)
      Check if a Path exists and can be read.
      static boolean canReadAndIsDir​(java.io.File file)
      Check if a File exists, is a directory, and can be read.
      static boolean canReadAndIsDir​(java.nio.file.Path path)
      Check if a Path exists, is a directory, and can be read.
      static boolean canReadAndIsFile​(java.io.File file)
      Check if a File exists, is a regular file, and can be read.
      static boolean canReadAndIsFile​(java.nio.file.Path path)
      Check if a Path exists, is a regular file, and can be read.
      static void checkCanReadAndIsDir​(java.io.File file)
      Check if a File exists, is a directory, and can be read.
      static void checkCanReadAndIsFile​(java.io.File file)
      Check if a File exists, is a regular file, and can be read.
      static void checkCanReadAndIsFile​(java.nio.file.Path path)
      Check if a Path exists, is a regular file, and can be read.
      static boolean closeDirectByteBuffer​(java.nio.ByteBuffer byteBuffer, ReflectionUtils reflectionUtils, LogNode log)
      Close a DirectByteBuffer -- in particular, will unmap a MappedByteBuffer.
      private static boolean closeDirectByteBufferPrivileged​(java.nio.ByteBuffer byteBuffer, LogNode log)
      Close a direct byte buffer (run in doPrivileged).
      static java.lang.String currDirPath()
      Get the current directory (only looks at the current directory the first time it is called, then caches this value for future reads).
      static java.lang.String getParentDirPath​(java.lang.String path)
      Get the parent dir path.
      static java.lang.String getParentDirPath​(java.lang.String path, char separator)
      Get the parent dir path.
      static boolean isClassfile​(java.lang.String path)
      Check if the path ends with a ".class" extension, ignoring case.
      private static void lookupCleanMethodPrivileged()
      Get the clean() method, attachment() method, and theUnsafe field, called inside doPrivileged.
      static java.lang.String sanitizeEntryPath​(java.lang.String path, boolean removeInitialSlash, boolean removeFinalSlash)
      Sanitize relative paths against "zip slip" vulnerability, by removing path segments if ".." is found in the URL, but without allowing navigation above the path hierarchy root.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • directByteBufferCleanerMethod

        private static java.lang.reflect.Method directByteBufferCleanerMethod
        The DirectByteBuffer.cleaner() method.
      • cleanerCleanMethod

        private static java.lang.reflect.Method cleanerCleanMethod
        The Cleaner.clean() method.
      • attachmentMethod

        private static java.lang.reflect.Method attachmentMethod
        The attachment() method.
      • theUnsafe

        private static java.lang.Object theUnsafe
        The Unsafe object.
      • initialized

        private static java.util.concurrent.atomic.AtomicBoolean initialized
        True if class' static fields have been initialized.
      • currDirPath

        private static java.lang.String currDirPath
        The current directory path (only reads the current directory once, the first time this field is accessed, so will not reflect subsequent changes to the current directory).
      • MAX_BUFFER_SIZE

        public static final int MAX_BUFFER_SIZE
        The maximum size of a file buffer array. Eight bytes smaller than Integer.MAX_VALUE, since some VMs reserve header words in arrays.
        See Also:
        Constant Field Values
    • Constructor Detail

      • FileUtils

        private FileUtils()
        Constructor.
    • Method Detail

      • currDirPath

        public static java.lang.String currDirPath()
        Get the current directory (only looks at the current directory the first time it is called, then caches this value for future reads).
        Returns:
        The current directory, as a string
      • sanitizeEntryPath

        public static java.lang.String sanitizeEntryPath​(java.lang.String path,
                                                         boolean removeInitialSlash,
                                                         boolean removeFinalSlash)
        Sanitize relative paths against "zip slip" vulnerability, by removing path segments if ".." is found in the URL, but without allowing navigation above the path hierarchy root. Treats each "!" character as a new path hierarchy root. Also removes "." and empty path segments ("//").
        Parameters:
        path - The path to sanitize.
        removeInitialSlash - If true, remove any '/' character(s) from the beginning of the returned path.
        removeFinalSlash - If true, remove any '/' character(s) from the end of the returned path.
        Returns:
        The sanitized path.
      • isClassfile

        public static boolean isClassfile​(java.lang.String path)
        Check if the path ends with a ".class" extension, ignoring case.
        Parameters:
        path - A file path.
        Returns:
        true if path has a ".class" extension, ignoring case.
      • canRead

        public static boolean canRead​(java.io.File file)
        Check if a File exists and can be read.
        Parameters:
        file - A File.
        Returns:
        true if a file exists and can be read.
      • canRead

        public static boolean canRead​(java.nio.file.Path path)
        Check if a Path exists and can be read.
        Parameters:
        path - A Path.
        Returns:
        true if the file exists and can be read.
      • canReadAndIsFile

        public static boolean canReadAndIsFile​(java.io.File file)
        Check if a File exists, is a regular file, and can be read.
        Parameters:
        file - A File.
        Returns:
        true if the file exists, is a regular file, and can be read.
      • canReadAndIsFile

        public static boolean canReadAndIsFile​(java.nio.file.Path path)
        Check if a Path exists, is a regular file, and can be read.
        Parameters:
        path - A Path.
        Returns:
        true if the file exists, is a regular file, and can be read.
      • checkCanReadAndIsFile

        public static void checkCanReadAndIsFile​(java.io.File file)
                                          throws java.io.IOException
        Check if a File exists, is a regular file, and can be read.
        Parameters:
        file - A File.
        Throws:
        java.io.IOException - if the file does not exist, is not a regular file, or cannot be read.
      • checkCanReadAndIsFile

        public static void checkCanReadAndIsFile​(java.nio.file.Path path)
                                          throws java.io.IOException
        Check if a Path exists, is a regular file, and can be read.
        Parameters:
        path - A Path.
        Throws:
        java.io.IOException - if the path does not exist, is not a regular file, or cannot be read.
      • canReadAndIsDir

        public static boolean canReadAndIsDir​(java.io.File file)
        Check if a File exists, is a directory, and can be read.
        Parameters:
        file - A File.
        Returns:
        true if the file exists, is a directory, and can be read.
      • canReadAndIsDir

        public static boolean canReadAndIsDir​(java.nio.file.Path path)
        Check if a Path exists, is a directory, and can be read.
        Parameters:
        path - A Path.
        Returns:
        true if the file exists, is a directory, and can be read.
      • checkCanReadAndIsDir

        public static void checkCanReadAndIsDir​(java.io.File file)
                                         throws java.io.IOException
        Check if a File exists, is a directory, and can be read.
        Parameters:
        file - A File.
        Throws:
        java.io.IOException - if the file does not exist, is not a directory, or cannot be read.
      • getParentDirPath

        public static java.lang.String getParentDirPath​(java.lang.String path,
                                                        char separator)
        Get the parent dir path.
        Parameters:
        path - the path
        separator - the separator
        Returns:
        the parent dir path
      • getParentDirPath

        public static java.lang.String getParentDirPath​(java.lang.String path)
        Get the parent dir path.
        Parameters:
        path - the path
        Returns:
        the parent dir path
      • lookupCleanMethodPrivileged

        private static void lookupCleanMethodPrivileged()
        Get the clean() method, attachment() method, and theUnsafe field, called inside doPrivileged.
      • closeDirectByteBufferPrivileged

        private static boolean closeDirectByteBufferPrivileged​(java.nio.ByteBuffer byteBuffer,
                                                               LogNode log)
        Close a direct byte buffer (run in doPrivileged).
        Parameters:
        byteBuffer - the byte buffer
        log - the log
        Returns:
        true if successful
      • closeDirectByteBuffer

        public static boolean closeDirectByteBuffer​(java.nio.ByteBuffer byteBuffer,
                                                    ReflectionUtils reflectionUtils,
                                                    LogNode log)
        Close a DirectByteBuffer -- in particular, will unmap a MappedByteBuffer.
        Parameters:
        byteBuffer - The ByteBuffer to close/unmap.
        log - The log.
        Returns:
        True if the byteBuffer was closed/unmapped.