Class FileUtil


  • public class FileUtil
    extends com.intellij.openapi.util.io.FileUtil
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.io.FileFilter ACCEPT_ALL_FILES_FILTER  
      static java.lang.String DIST_SUFFIX  
      • Fields inherited from class com.intellij.openapi.util.io.FileUtil

        MEGABYTE
    • Constructor Summary

      Constructors 
      Constructor Description
      FileUtil()  
    • Method Summary

      All Methods Static Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      static boolean areTheSame​(java.io.File file1, java.io.File file2)
      Checks that both file pointers specify the same object.
      static void atomicRename​(java.io.File from, java.io.File to, int maxAttempts)
      Renames (moves) the from file to the to file, replacing the second one if exists.
      static boolean checkContentEqual​(java.io.File file1, java.io.File file2)
      Check both files exist and are same byte-by-byte.
      static void checkTmpDir()
      Checks if it is allowed to use tmpDir taken from "java.io.tmpdir" system property
      static void close​(java.io.Closeable e)
      Closes a resource if it is not null All possible IOExceptions are ignored
      static void close​(java.util.zip.ZipFile e)
      Closes a resource if it is not null All possible IOExceptions are ignored
      static void closeAll​(java.io.Closeable... toClose)
      Closes all not-null resources All possible IOExceptions are ignored
      static java.lang.String convertAntToRegexp​(java.lang.String antPattern)  
      static java.lang.String convertAntToRegexp​(java.lang.String antPattern, boolean ignoreStartingSlash)  
      static void copy​(java.io.File from, java.io.File to)  
      static void copy​(java.io.InputStream from, java.io.File to)  
      static void copy​(java.io.InputStream is, java.io.OutputStream os)
      Same as copyStream.
      static void copyFilePart​(java.io.File sourceFile, long offset, long length, java.io.OutputStream destination)
      Copies a part of a file to output stream.
      static void copyResource​(java.lang.Class<?> clazz, java.lang.String resourceName, java.io.File outputFile)
      Copies contents of the specified resource into the specified file.
      static void copyResource​(java.lang.String resourceName, java.io.File outputFile)
      Deprecated.
      Use copyResource(Class, String, java.io.File) to overcome classloader change issues
      static void copyResourceIfNotExists​(java.lang.Class<?> clazz, java.lang.String resourceName, java.io.File outputFile)
      Copies the resource file into specified file if it doesn't exist (see copyResource(Class, String, java.io.File)).
      static void copyResourceWithDist​(java.lang.Class<?> clazz, java.lang.String resourceName, java.io.File outputFile)
      Copies the resource file into specified file (see copyResource(Class, String, java.io.File)).
      static void copyStreamRangeAndClose​(java.io.InputStream source, long offset, long length, java.io.OutputStream destination)
      Copies a stream range of a file to output stream.
      static void copyStreams​(java.io.InputStream is, java.io.OutputStream os)  
      static java.io.File createDir​(java.io.File dir)
      Creates directory if it does not exist.
      static java.io.File createEmptyDir​(java.io.File dir)
      Creates an empty directory, removing all content if it already exists.
      static boolean createSymlink​(java.io.File target, java.io.File symlinkFile)
      Attempts to create a symlink at symlinkFile that points to target
      static java.io.File createTempDirectory​(java.lang.String prefix, java.lang.String suffix)
      Overrides the same method from FileUtil.
      static java.io.File createTempDirectory​(java.lang.String prefix, java.lang.String suffix, java.io.File in)  
      static java.io.File createTempFile​(java.io.File dir, java.lang.String prefix, java.lang.String suffix, boolean create)
      Overrides the same method from FileUtil.
      static java.io.File createTempFile​(java.lang.String prefix, java.lang.String suffix)
      Overrides the same method from FileUtil.
      static boolean delete​(java.io.File file)
      Removes specified file or directory, same as FileUtil.delete(file, 10).
      static java.util.Set<java.io.File> delete​(java.io.File fileOrDirectory, int numAttempts)
      Removes specified directory or file, for each removed file performs operation up to numAttempts.
      static java.util.Set<java.io.File> delete​(java.io.File fileOrDirectory, java.io.FileFilter fileFilter, int numAttempts)
      Removes specified directory or file, for each removed file performs operation up to numAttempts
      static java.util.Set<java.io.File> delete​(java.io.File fileOrDirectory, java.io.FileFilter fileFilter, int numAttempts, FileUtil.FilesDeleteListener deleteListener)
      Removes files in fileOrDirectory, skipping all files that do not match fileFilter as well as all their subtitles/subfolders if fileFilter is a directory.
      static java.util.Collection<java.io.File> deleteFiles​(java.util.Collection<java.io.File> filesToDelete)
      Deletes the given files, in several attempts, if needed.
      static boolean deleteIfEmpty​(java.io.File dir)
      Removes directory if it is empty
      static java.io.File findFile​(java.io.FileFilter filter, java.io.File... directories)
      Searches for a file in the specified directories recursively.
      static java.util.Collection<java.io.File> findFiles​(java.io.FileFilter filter, java.io.File... directories)
      Searches for files in the specified directories recursively.
      static java.lang.String fixDirectoryName​(java.lang.String name)
      Fixes directory name: replaces all dangerous characters with '_'.
      static java.lang.String fixDirectoryNameAllowUnicode​(java.lang.String name)
      Fixes directory name in relaxed manner.
      static long freeSpaceKb​(java.lang.String path)  
      static java.io.File getCanonicalFile​(java.io.File file)
      Attempts to obtain canonical file from the specified file and if it fails returns absolute file.
      static java.lang.String getCommonParent​(java.lang.String firstUrl, java.lang.String secondUrl)
      Deprecated.
      static java.io.File getCommonParentFile​(java.io.File file1, java.io.File file2)  
      static java.lang.String getExtension​(java.lang.String fileNameWithDirectory)
      Unlike com.intellij.openapi.util.io.FileUtil.getExtension, can use this with full file name (including directory name).
      static java.io.File getFileInSameDir​(java.io.File origFile, java.lang.String neededFileName)
      Returns a java.io.File object representing the file located in the same directory as origFile with the given file name

      assert getFileInSameDir(new File("somDir/someFile.txt"), "anotherFile.txt"). equals(new File("someDir/anotherFile.txt"));
      static java.lang.String getFilesSignature​(java.util.Collection<java.io.File> fileCollection)  
      static java.lang.Long getFreeSpace​(java.io.File file)
      Computes free space on the disk that contains a file
      static java.lang.Long getFreeSpaceBytesSafe​(java.io.File dir)
      Gets free space in bytes avoiding Long overflow if free space exceeds 2^63 bytes
      static java.lang.Long getFreeSpaceKB​(java.io.File dir)
      Deprecated.
      since 10.0.
      static java.lang.String getName​(java.lang.String path)
      Gets name of the file in platform-independent way (unlike new File(path).getName()) For directories, gets name of the directory
      static java.lang.String getNameOrAbsolutePath​(java.io.File baseDir, java.io.File checkDir)
      Checks whether directory lies directly under baseDir.
      static java.lang.String getNameWithoutExtension​(java.io.File file)  
      static java.lang.String getNameWithoutExtension​(java.lang.String name)  
      static java.util.List<java.io.File> getSubDirectories​(java.io.File root)  
      static java.lang.String getTempDirectory()
      Overrides the same method from FileUtil.
      static long getTotalDirectorySize​(java.io.File dir)
      Returns the directory size in bytes of files under the specified directory (non recursive).
      static long getTotalDirectorySize​(java.io.File dir, boolean recursively)
      Returns the directory size in bytes of files under the specified directory recursively.
      static java.io.Reader getUTF8Reader​(java.io.File file)
      Returns Reader with utf-8 encoding to read the file, because FileReader uses default platform encoding
      static boolean haveEqualContentIgnoringLineEndings​(java.io.File file1, java.io.File file2)
      Check both files exist and have same content ignoring line-endings and leading/trailing spaces.
      static boolean isAncestor​(java.io.File ancestor, java.io.File file, boolean strict)
      Check if the ancestor is an ancestor of file.
      static boolean isBadDirectoryName​(java.lang.String name)
      Checks whether specified name contains dangerous characters which might prevent successful directory creation.
      static boolean isBinaryData​(byte[] data, int size)
      Returns whether specified byte array represents binary data (not text)
      static boolean isBinaryFile​(java.io.File file)
      Returns whether a specified file is a binary file.
      static boolean isEmptyDir​(java.io.File dir)
      Returns true if directory is empty or does not exist and false otherwise.
      static boolean isFileSeparator​(char c1)  
      static boolean isReadonly​(java.io.File file)
      Returns true if file is readonly and false otherwise
      static boolean isSymlink​(java.io.File file)
      Checks whether file is a symlink by resolving absolute path into real (canonical) one
      static boolean isTextData​(byte[] data, int size)
      Returns whether specified byte array represents text data (not binary)
      static java.io.File[] listFiles​(java.io.File directory)
      A simple wrapper around file.listFiles(filter) that handles possible null result.
      static java.io.File[] listFiles​(java.io.File directory, java.io.FilenameFilter filter)
      A simple wrapper around file.listFiles(filter) that handles possible null result.
      static <C extends java.util.Collection<java.lang.String>>
      C
      listFilesRecursively​(java.io.File dir, java.lang.String prefix, boolean includeDirs, int depthLimit, Predicate<java.io.File> predicate, C collection)
      Traverses the given directory and retrieves all files (and nested directories, if specified).
      static boolean moveDirWithContent​(java.io.File fromDir, java.io.File to, FileUtil.ErrorReporter reporter)
      Move directory content from given directory to target location.
      static java.lang.String normalizeAbsolutePath​(java.lang.String path)
      Normalizes absolute path by eliminating all possible path/../ /./ ./path combinations.
      static java.lang.String normalizeRelativePath​(java.lang.String path)
      Normalizes relative path by eliminating all possible path/../ /./ ./path combinations Doesn't check if the provided path is relative, but may return unexpected result for absolute paths.
      static java.lang.String normalizeSeparator​(java.lang.String filePath)
      Replace all separators like / and \ to File.separatorChar
      static org.jdom.Element parseDocument​(java.io.File file)  
      static org.jdom.Element parseDocument​(java.io.File file, boolean validate)  
      static org.jdom.Element parseDocument​(java.io.InputStream input, boolean validate)  
      static org.jdom.Element parseDocument​(java.io.Reader input, boolean validate)  
      static void processXmlFile​(java.io.File file, FileUtil.Processor processor)
      Updates the file according to the provided processor.
      static java.util.List<java.lang.String> readFile​(java.io.File file)
      Read list of lines from the file.
      static java.util.List<java.lang.String> readFile​(java.io.File file, java.lang.String encoding)
      Read list of lines from the file.
      static java.lang.String readResourceAsString​(java.lang.Class<?> clazz, java.lang.String resourceName, java.nio.charset.Charset charset)
      Reads the jar resource as a text.
      static java.lang.String readText​(java.io.File file)
      Read the specified text file into a String variable.
      static java.lang.String readText​(java.io.File file, java.lang.String encoding)
      Read the specified text file into a String variable.
      static void readXmlFile​(java.io.File file, FileUtil.Processor p)  
      static boolean rename​(java.io.File from, java.io.File to, FileUtil.ErrorReporter reporter)
      Rename/move file or directory to target location .
      static void renameAndReportErrors​(java.io.File oldName, java.io.File newName)
      Renames or moves the give file or directory.
      static java.io.File renameFileNameOnly​(java.io.File file, java.lang.String newName)  
      static java.io.File resolvePath​(java.io.File baseDir, java.lang.String path)
      If path is absolute, returns path, otherwise it returns path within specified base directory.
      static boolean sameButDifferInCase​(java.io.File file1, java.io.File file2)
      Check whether the two given paths denotes the same file but in differ cases.
      static void saveDocument​(org.jdom.Document document, java.io.File file)  
      static void setExectuableAttribute​(java.lang.String path, boolean executableFlag)
      Set executable attribute, it makes sense only on non-windows platforms.
      static void sortFiles​(java.io.File[] files)  
      static void symlinkAwareDelete​(java.io.File fileOrDirectory)
      Deprecated.
      static void symlinkAwareDelete​(java.io.File fileOrDirectory, java.io.FileFilter fileFilter, int numAttempts)
      static void writeFile​(java.io.File file, java.lang.String text)
      Deprecated.
      This procedure loses exceptions that is very dangerous.
      static void writeFile​(java.io.File file, java.lang.String text, java.lang.String encoding)
      Writes text to file.
      static void writeFile​(java.io.File file, java.lang.String text, java.nio.charset.Charset charset)
      Creates the file with the parental directories if need and writes the text to the file.
      static void writeFileAndReportErrors​(java.io.File file, java.lang.String text)
      Writes text to file.
      static void writeViaTmpFile​(java.io.File targetFile, java.io.InputStream content, FileUtil.IOAction beforeWriteAction)
      Utility to reliably save a file not leaving the file in a corrupted state in case of disk errors or process crash.
      • Methods inherited from class com.intellij.openapi.util.io.FileUtil

        adaptiveLoadBytes, adaptiveLoadText, asyncDelete, asyncDelete, canCallCanExecute, canExecute, collectMatchedFiles, comparePaths, copy, copyContent, copyDir, copyDir, copyDir, createIfDoesntExist, createParentDirs, createSequentFileName, ensureCanCreateFile, findFirstThatExist, findSequentNonexistentFile, getParentFile, getRelativePath, getRelativePath, getRelativePath, isAbsolute, isFilePathAcceptable, loadBytes, loadBytes, loadFileBytes, loadFileText, loadFileText, loadText, loadTextAndClose, moveDirWithContent, nameToCompare, pathHashCode, pathsEqual, processFilesRecursively, rename, resolveShortWindowsName, sanitizeFileName, setReadOnlyAttribute, startsWith, startsWith, toSystemDependentName, toSystemIndependentName, unquote, writeToFile, writeToFile
      • Methods inherited from class java.lang.Object

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

      • ACCEPT_ALL_FILES_FILTER

        public static final java.io.FileFilter ACCEPT_ALL_FILES_FILTER
    • Constructor Detail

      • FileUtil

        public FileUtil()
    • Method Detail

      • readFile

        @NotNull
        public static java.util.List<java.lang.String> readFile​(@NotNull
                                                                java.io.File file)
                                                         throws java.io.IOException
        Read list of lines from the file. Each line is terminated by corresponding line feed
        Parameters:
        file - file to read
        Returns:
        list of file lines
        Throws:
        java.io.IOException - upon a problem when reading from file
        Since:
        4.0.1
      • readFile

        @NotNull
        public static java.util.List<java.lang.String> readFile​(@NotNull
                                                                java.io.File file,
                                                                @NotNull
                                                                java.lang.String encoding)
                                                         throws java.io.IOException
        Read list of lines from the file. Each line is terminated by corresponding line feed
        Parameters:
        file - file to read
        Returns:
        list of file lines
        Throws:
        java.io.IOException - upon a problem when reading from file
        Since:
        9.0
      • readText

        @NotNull
        public static java.lang.String readText​(@NotNull
                                                java.io.File file)
                                         throws java.io.IOException
        Read the specified text file into a String variable.
        Parameters:
        file - file to read
        Returns:
        file text
        Throws:
        java.io.IOException - upon a problem when reading from file
        Since:
        5.0
      • readText

        @NotNull
        public static java.lang.String readText​(@NotNull
                                                java.io.File file,
                                                @NotNull
                                                java.lang.String encoding)
                                         throws java.io.IOException
        Read the specified text file into a String variable.
        Parameters:
        file - file to read
        encoding - encoding
        Returns:
        file text
        Throws:
        java.io.IOException - upon a problem when reading from file
        Since:
        7.1
      • writeFile

        @Deprecated
        public static void writeFile​(@NotNull
                                     java.io.File file,
                                     @NotNull
                                     java.lang.String text)
        Deprecated.
        This procedure loses exceptions that is very dangerous. Use writeFileAndReportErrors(java.io.File, java.lang.String) instead.
        TODO rename it to writeFileWithNoExceptions Write text to file and report any errors via LOG.error()
        Parameters:
        file - file to write
        text - text to write to file
      • writeFileAndReportErrors

        public static void writeFileAndReportErrors​(@NotNull
                                                    java.io.File file,
                                                    @NotNull
                                                    java.lang.String text)
                                             throws java.io.IOException
        Writes text to file. Throws IO exception if error occurred.
        Parameters:
        file - file to write text to
        text - text to write in file
        Throws:
        java.io.IOException - if error occurred
        Since:
        6.5
      • writeFile

        public static void writeFile​(@NotNull
                                     java.io.File file,
                                     @NotNull
                                     java.lang.String text,
                                     @NotNull
                                     java.nio.charset.Charset charset)
                              throws java.io.IOException
        Creates the file with the parental directories if need and writes the text to the file. Throws IO exception if an error occurred.
        Parameters:
        file - file to write text to
        text - text to write in the file
        charset - encoding (see StandardCharsets)
        Throws:
        java.io.IOException - if an error occurred
        Since:
        2020.2
      • writeFile

        public static void writeFile​(@NotNull
                                     java.io.File file,
                                     @NotNull
                                     java.lang.String text,
                                     @NotNull
                                     java.lang.String encoding)
                              throws java.io.IOException
        Writes text to file. Throws IO exception if error occurred.
        Parameters:
        file - file to write text to
        text - text to write in file
        encoding - encoding
        Throws:
        java.io.IOException - if error occurred
        Since:
        7.1
      • readXmlFile

        public static void readXmlFile​(@NotNull
                                       java.io.File file,
                                       @NotNull
                                       FileUtil.Processor p)
      • parseDocument

        @NotNull
        public static org.jdom.Element parseDocument​(@NotNull
                                                     java.io.File file)
                                              throws org.jdom.JDOMException,
                                                     java.io.IOException
        Throws:
        org.jdom.JDOMException
        java.io.IOException
      • parseDocument

        @NotNull
        public static org.jdom.Element parseDocument​(@NotNull
                                                     java.io.File file,
                                                     boolean validate)
                                              throws org.jdom.JDOMException,
                                                     java.io.IOException
        Throws:
        org.jdom.JDOMException
        java.io.IOException
      • parseDocument

        @NotNull
        public static org.jdom.Element parseDocument​(@NotNull
                                                     java.io.InputStream input,
                                                     boolean validate)
                                              throws org.jdom.JDOMException,
                                                     java.io.IOException
        Throws:
        org.jdom.JDOMException
        java.io.IOException
      • parseDocument

        @NotNull
        public static org.jdom.Element parseDocument​(@NotNull
                                                     java.io.Reader input,
                                                     boolean validate)
                                              throws org.jdom.JDOMException,
                                                     java.io.IOException
        Throws:
        org.jdom.JDOMException
        java.io.IOException
        Since:
        8.0
      • processXmlFile

        public static void processXmlFile​(@NotNull
                                          java.io.File file,
                                          @NotNull
                                          FileUtil.Processor processor)
        Updates the file according to the provided processor.
      • saveDocument

        public static void saveDocument​(@NotNull
                                        org.jdom.Document document,
                                        @NotNull
                                        java.io.File file)
                                 throws java.io.IOException
        Throws:
        java.io.IOException
      • getFilesSignature

        @NotNull
        public static java.lang.String getFilesSignature​(@NotNull
                                                         java.util.Collection<java.io.File> fileCollection)
      • createTempDirectory

        @NotNull
        public static java.io.File createTempDirectory​(@NotNull
                                                       java.lang.String prefix,
                                                       java.lang.String suffix,
                                                       java.io.File in)
                                                throws java.io.IOException
        Throws:
        java.io.IOException
      • createTempDirectory

        @NotNull
        public static java.io.File createTempDirectory​(@NonNls
                                                       java.lang.String prefix,
                                                       @NonNls
                                                       java.lang.String suffix)
                                                throws java.io.IOException
        Overrides the same method from FileUtil.
        Throws:
        java.io.IOException
      • createTempFile

        @NotNull
        public static java.io.File createTempFile​(@NonNls
                                                  java.io.File dir,
                                                  @NonNls @NotNull
                                                  java.lang.String prefix,
                                                  @NonNls
                                                  java.lang.String suffix,
                                                  boolean create)
                                           throws java.io.IOException
        Overrides the same method from FileUtil.
        Throws:
        java.io.IOException
      • createTempFile

        @NotNull
        public static java.io.File createTempFile​(@NonNls @NotNull
                                                  java.lang.String prefix,
                                                  @NonNls
                                                  java.lang.String suffix)
                                           throws java.io.IOException
        Overrides the same method from FileUtil.
        Throws:
        java.io.IOException
      • getTempDirectory

        @NotNull
        public static java.lang.String getTempDirectory()
        Overrides the same method from FileUtil.
      • getFileInSameDir

        @NotNull
        public static java.io.File getFileInSameDir​(@NotNull
                                                    java.io.File origFile,
                                                    java.lang.String neededFileName)
        Returns a java.io.File object representing the file located in the same directory as origFile with the given file name

        assert getFileInSameDir(new File("somDir/someFile.txt"), "anotherFile.txt"). equals(new File("someDir/anotherFile.txt"));
        Parameters:
        origFile - original file
        neededFileName - name of required file
        Returns:
        required file
      • moveDirWithContent

        public static boolean moveDirWithContent​(java.io.File fromDir,
                                                 java.io.File to,
                                                 FileUtil.ErrorReporter reporter)
        Move directory content from given directory to target location. If there is a problem moving a file, a error is reported via ErrorReporter. Does not override existing target files.
        Parameters:
        fromDir - source directory
        to - target directory
        reporter - used to report text errors during the move
        Returns:
        true if fromDir was moved to to path, false if there were some errors during the move
        Since:
        9.0
      • rename

        public static boolean rename​(@NotNull
                                     java.io.File from,
                                     @NotNull
                                     java.io.File to,
                                     @Nullable
                                     FileUtil.ErrorReporter reporter)
        Rename/move file or directory to target location . If there is a problem moving a file, a error is reported via ErrorReporter. If simple rename of a file doesn't work, tries to rename via copy + delete

        Does not override existing target files.

        Parameters:
        from - source file or directory
        to - target file or directory
        reporter - used to report text errors during the move; i.e. if move is not successful, reports a error message.
        Returns:
        true if rename/move was successful, false otherwise
        Since:
        9.0
      • writeViaTmpFile

        public static void writeViaTmpFile​(@NotNull
                                           java.io.File targetFile,
                                           @NotNull
                                           java.io.InputStream content,
                                           @NotNull
                                           FileUtil.IOAction beforeWriteAction)
                                    throws java.io.IOException
        Utility to reliably save a file not leaving the file in a corrupted state in case of disk errors or process crash. Writes provided content to the temporary targetFile.new file, closes the input stream, calls provided action, and renames tmp file to the targetFile. Action can be used to make backup copies of the targetFile
        Parameters:
        targetFile - target file
        content - content to write, the stream will be closed after writing
        beforeWriteAction - action to run before renaming temp file to the targetFile
        Throws:
        java.io.IOException - in case of IO error
        Since:
        2018.1
      • atomicRename

        public static void atomicRename​(@NotNull
                                        java.io.File from,
                                        @NotNull
                                        java.io.File to,
                                        int maxAttempts)
                                 throws java.io.IOException
        Renames (moves) the from file to the to file, replacing the second one if exists.
        Throws:
        java.io.IOException
      • renameAndReportErrors

        public static void renameAndReportErrors​(@NotNull
                                                 java.io.File oldName,
                                                 @NotNull
                                                 java.io.File newName)
                                          throws java.io.IOException,
                                                 java.lang.SecurityException
        Renames or moves the give file or directory.

        Performs File.renameTo(java.io.File) but checks the result and throws IOException when the rename is unsuccessful.

        Parameters:
        oldName - old path and name.
        newName - new path and name.
        Throws:
        java.io.IOException - when rename is unsuccessful.
        java.lang.SecurityException - if a security manager exists and it has denied the operation.
        Since:
        8.0
      • sameButDifferInCase

        public static boolean sameButDifferInCase​(@NotNull
                                                  java.io.File file1,
                                                  @NotNull
                                                  java.io.File file2)
        Check whether the two given paths denotes the same file but in differ cases.

        Note: the result is depend on the actual file system. In unix this function always returns false.

        Parameters:
        file1 - the first file to compare.
        file2 - the second file to compare.
        Returns:
        differ but in case only.
        Since:
        8.0
      • renameFileNameOnly

        @NotNull
        public static java.io.File renameFileNameOnly​(@NotNull
                                                      java.io.File file,
                                                      @NotNull
                                                      java.lang.String newName)
                                               throws java.io.IOException,
                                                      java.lang.SecurityException
        Throws:
        java.io.IOException
        java.lang.SecurityException
      • resolvePath

        @NotNull
        public static java.io.File resolvePath​(@NotNull
                                               java.io.File baseDir,
                                               @NotNull
                                               java.lang.String path)
        If path is absolute, returns path, otherwise it returns path within specified base directory.
        Parameters:
        baseDir - base directory for the resolving the path
        path - path to be resolved, may be absolute or relative for baseDir
        Returns:
        absolute path File
      • copyResource

        @Deprecated
        public static void copyResource​(@NotNull
                                        java.lang.String resourceName,
                                        @NotNull
                                        java.io.File outputFile)
        Deprecated.
        Use copyResource(Class, String, java.io.File) to overcome classloader change issues
        Copies contents of the specified resource into the specified file.
        Parameters:
        resourceName - Name of the classpath resource
        outputFile - target file for the resource data
      • copyResource

        public static void copyResource​(@NotNull
                                        java.lang.Class<?> clazz,
                                        @NotNull
                                        java.lang.String resourceName,
                                        @NotNull
                                        java.io.File outputFile)
        Copies contents of the specified resource into the specified file. Uses Class.getResourceAsStream(String) in 'clazz' parameter to fetch the resource. NOTE: File will be created even if there was no such resource
        Parameters:
        clazz - class from the class loader that can access the resource
        resourceName - Name of the classpath resource
        outputFile - target file for the resource data
      • copyResourceIfNotExists

        public static void copyResourceIfNotExists​(@NotNull
                                                   java.lang.Class<?> clazz,
                                                   @NotNull
                                                   java.lang.String resourceName,
                                                   @NotNull
                                                   java.io.File outputFile)
        Copies the resource file into specified file if it doesn't exist (see copyResource(Class, String, java.io.File)).
        Parameters:
        clazz - class from the class loader that can access the resource
        resourceName - the name of the classpath resource
        outputFile - destination file for the resource data
      • copyResourceWithDist

        public static void copyResourceWithDist​(@NotNull
                                                java.lang.Class<?> clazz,
                                                @NotNull
                                                java.lang.String resourceName,
                                                @NotNull
                                                java.io.File outputFile)
        Copies the resource file into specified file (see copyResource(Class, String, java.io.File)).

        Handles the '.dist' file as well, i.e.:

        • if the destination file has been changed (if it does not equal to the '.dist' file), only the '.dist' file is copied (thus the destination file is not overwritten);
        • if the destination file has not been changed, or does not exist or the '.dist' file does not exist, both files are copied.
        Parameters:
        clazz - class from the class loader that can access the resource
        resourceName - the name of the classpath resource
        outputFile - destination file for the resource data
      • readResourceAsString

        @Nullable
        public static java.lang.String readResourceAsString​(@NotNull
                                                            java.lang.Class<?> clazz,
                                                            @NotNull
                                                            java.lang.String resourceName,
                                                            @NotNull
                                                            java.nio.charset.Charset charset)
                                                     throws java.io.IOException
        Reads the jar resource as a text.
        Parameters:
        clazz - class (used to determine the resource path).
        resourceName - name of resource to read.
        charset - character set of the resource file.
        Returns:
        text from resource, or null if the resource not found.
        Throws:
        java.io.IOException - when IO error occurs
        Since:
        6.0
      • copyStreams

        public static void copyStreams​(@NotNull
                                       java.io.InputStream is,
                                       @NotNull
                                       java.io.OutputStream os)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • copyFilePart

        public static void copyFilePart​(@NotNull
                                        java.io.File sourceFile,
                                        long offset,
                                        long length,
                                        @NotNull
                                        java.io.OutputStream destination)
                                 throws java.io.IOException
        Copies a part of a file to output stream. Stream is closed after part was copied.
        Parameters:
        sourceFile - file to copy
        offset - file offset
        length - length of data
        destination - stream to write to
        Throws:
        java.io.IOException - if IOException exception occurs
      • copyStreamRangeAndClose

        public static void copyStreamRangeAndClose​(@NotNull
                                                   java.io.InputStream source,
                                                   long offset,
                                                   long length,
                                                   @NotNull
                                                   java.io.OutputStream destination)
                                            throws java.io.IOException
        Copies a stream range of a file to output stream. Stream would be closed at end
        Parameters:
        source - file to copy
        offset - file offset
        length - length of data
        destination - stream to write to
        Throws:
        java.io.IOException - if IOException exception occurs
        Since:
        6.5
        See Also:
        TCStreamUtil.skip(java.io.InputStream, long), TCStreamUtil.writeBinary(java.io.InputStream, long, java.io.OutputStream)
      • close

        public static void close​(@Nullable
                                 java.io.Closeable e)
        Closes a resource if it is not null All possible IOExceptions are ignored
        Parameters:
        e - resource to close
      • close

        public static void close​(@Nullable
                                 java.util.zip.ZipFile e)
        Closes a resource if it is not null All possible IOExceptions are ignored
        Parameters:
        e - resource to close
        Since:
        8.0
      • closeAll

        public static void closeAll​(@NotNull
                                    java.io.Closeable... toClose)
        Closes all not-null resources All possible IOExceptions are ignored
        Parameters:
        toClose - resources to close
        Since:
        7.0
      • getSubDirectories

        @NotNull
        public static java.util.List<java.io.File> getSubDirectories​(@NotNull
                                                                     java.io.File root)
      • createDir

        @NotNull
        public static java.io.File createDir​(@NotNull
                                             java.io.File dir)
                                      throws java.io.IOException
        Creates directory if it does not exist. Throws IOException if directory creation was not successful.
        Parameters:
        dir - directory to be created
        Returns:
        dir
        Throws:
        java.io.IOException - if failed to create directory
      • createEmptyDir

        @NotNull
        public static java.io.File createEmptyDir​(@NotNull
                                                  java.io.File dir)
                                           throws java.io.IOException
        Creates an empty directory, removing all content if it already exists.
        Parameters:
        dir - the directory to create
        Returns:
        result file
        Throws:
        java.io.IOException - in case of I/O error occurred
      • getTotalDirectorySize

        public static long getTotalDirectorySize​(@Nullable
                                                 java.io.File dir)
        Returns the directory size in bytes of files under the specified directory (non recursive).
        Parameters:
        dir - the directory to traverse
        Returns:
        size in bytes
      • getTotalDirectorySize

        public static long getTotalDirectorySize​(@Nullable
                                                 java.io.File dir,
                                                 boolean recursively)
        Returns the directory size in bytes of files under the specified directory recursively.
        Parameters:
        dir - the directory to traverse
        Returns:
        size in bytes
        Since:
        7.1.4
      • deleteIfEmpty

        public static boolean deleteIfEmpty​(@NotNull
                                            java.io.File dir)
        Removes directory if it is empty
        Parameters:
        dir - directory to be removed
        Returns:
        true if the directory was removed and false otherwise
      • delete

        @NotNull
        public static java.util.Set<java.io.File> delete​(@NotNull
                                                         java.io.File fileOrDirectory,
                                                         int numAttempts)
        Removes specified directory or file, for each removed file performs operation up to numAttempts. If directory is provided, all files under this directory will be removed recursively.
        Parameters:
        fileOrDirectory - file or directory to remove
        numAttempts - maximum number of attempts to perform (must be positive)
        Returns:
        set of successfully removed files
        Since:
        8.0
      • symlinkAwareDelete

        @Deprecated
        public static void symlinkAwareDelete​(@NotNull
                                              java.io.File fileOrDirectory)
        Deprecated.
        Removes specified directory or file. On Unix it doesn't remove contents of the symlink dir if it points outside of the fileOrDirectory. On Windows no such checks are performed and this method behaves in the same way as delete(java.io.File).
        Parameters:
        fileOrDirectory - file or directory to remove
        Since:
        9.0
      • symlinkAwareDelete

        @Deprecated
        public static void symlinkAwareDelete​(@NotNull
                                              java.io.File fileOrDirectory,
                                              @NotNull
                                              java.io.FileFilter fileFilter,
                                              int numAttempts)
        Removes specified directory or file, for each removed file performs operation up to numAttempts. On Unix it doesn't remove contents of the symlink dir if it points outside of the fileOrDirectory. On Windows no such checks are performed and this method behaves in the same way as delete(java.io.File, java.io.FileFilter, int).
        Parameters:
        fileOrDirectory - file or directory to remove
        numAttempts - maximum number of attempts to perform (must be positive)
        fileFilter - filter for files, must return true for files to be removed and false otherwise
        Since:
        9.0
      • delete

        @NotNull
        public static java.util.Set<java.io.File> delete​(@NotNull
                                                         java.io.File fileOrDirectory,
                                                         @NotNull
                                                         java.io.FileFilter fileFilter,
                                                         int numAttempts)
        Removes specified directory or file, for each removed file performs operation up to numAttempts
        Parameters:
        fileOrDirectory - file or directory to remove
        numAttempts - maximum number of attempts to perform (must be positive)
        fileFilter - filter for files, must return true for files to be removed and false otherwise
        Returns:
        set of successfully removed files
        Since:
        8.0
      • delete

        @NotNull
        public static java.util.Set<java.io.File> delete​(@NotNull
                                                         java.io.File fileOrDirectory,
                                                         @NotNull
                                                         java.io.FileFilter fileFilter,
                                                         int numAttempts,
                                                         @Nullable
                                                         FileUtil.FilesDeleteListener deleteListener)
        Removes files in fileOrDirectory, skipping all files that do not match fileFilter as well as all their subtitles/subfolders if fileFilter is a directory.
      • delete

        public static boolean delete​(@NotNull
                                     java.io.File file)
        Removes specified file or directory, same as FileUtil.delete(file, 10).
        Parameters:
        file - file or directory to remove
        Returns:
        true if file or directory was removed and false otherwise
      • deleteFiles

        public static java.util.Collection<java.io.File> deleteFiles​(@NotNull
                                                                     java.util.Collection<java.io.File> filesToDelete)
        Deletes the given files, in several attempts, if needed.
        Parameters:
        filesToDelete - files to delete - files only, not directories. The files that don't exist are silently ignored.
        Returns:
        if all files were successfully deleted - an empty collection; or the files we could not to delete.
        Since:
        8.1
      • isEmptyDir

        public static boolean isEmptyDir​(@NotNull
                                         java.io.File dir)
        Returns true if directory is empty or does not exist and false otherwise.
        Parameters:
        dir - directory
        Returns:
        true if dir is empty or does not exist
      • isReadonly

        public static boolean isReadonly​(@NotNull
                                         java.io.File file)
        Returns true if file is readonly and false otherwise
        Parameters:
        file - file
        Returns:
        true if file is readonly
      • fixDirectoryName

        @NotNull
        public static java.lang.String fixDirectoryName​(@NotNull
                                                        java.lang.String name)
        Fixes directory name: replaces all dangerous characters with '_'.
        Parameters:
        name - name of the directory to fix
        Returns:
        name with all 'dangerous' characters replaced with '_'
      • fixDirectoryNameAllowUnicode

        @NotNull
        public static java.lang.String fixDirectoryNameAllowUnicode​(java.lang.String name)
        Fixes directory name in relaxed manner. Replaces dangerous punctuation with '_'. Allows symbols of unicode "Letter" category.
        Parameters:
        name - name of the directory to fix
        Returns:
        fixed name.
      • isBadDirectoryName

        public static boolean isBadDirectoryName​(@NotNull
                                                 java.lang.String name)
        Checks whether specified name contains dangerous characters which might prevent successful directory creation.
        Parameters:
        name - name to check (just name not path)
        Returns:
        true if directory with given name cannot be created because of invalid characters in it
      • normalizeSeparator

        @NotNull
        public static java.lang.String normalizeSeparator​(@NotNull
                                                          java.lang.String filePath)
        Replace all separators like / and \ to File.separatorChar
        Parameters:
        filePath - path to ve normalized
        Returns:
        path with replaced separators
      • normalizeRelativePath

        @NotNull
        public static java.lang.String normalizeRelativePath​(@NotNull
                                                             java.lang.String path)
        Normalizes relative path by eliminating all possible path/../ /./ ./path combinations Doesn't check if the provided path is relative, but may return unexpected result for absolute paths.
        Parameters:
        path - relative path
        Returns:
        normalized paths with all slashes replaced with '/' and all dot combinations removed (if possible)
        Since:
        4.0.2
      • normalizeAbsolutePath

        @NotNull
        public static java.lang.String normalizeAbsolutePath​(@NotNull
                                                             java.lang.String path)
        Normalizes absolute path by eliminating all possible path/../ /./ ./path combinations. Throws IllegalArgumentException if the specified path is not absolute (in terms of java.io.File#isAbsolute()).
        Parameters:
        path - absolute path
        Returns:
        normalized paths with all slashes replaced with File.separatorChar and all dot combinations removed (if possible)
        Throws:
        java.lang.IllegalArgumentException - if the specified path is not absolute.
        Since:
        9.0
      • sortFiles

        public static void sortFiles​(@NotNull
                                     java.io.File[] files)
      • getCommonParentFile

        @Nullable
        public static java.io.File getCommonParentFile​(@NotNull
                                                       java.io.File file1,
                                                       @NotNull
                                                       java.io.File file2)
      • getCommonParent

        @NotNull
        @Deprecated
        public static java.lang.String getCommonParent​(@NotNull
                                                       java.lang.String firstUrl,
                                                       @NotNull
                                                       java.lang.String secondUrl)
        Deprecated.
      • isFileSeparator

        public static boolean isFileSeparator​(char c1)
      • getCanonicalFile

        @NotNull
        public static java.io.File getCanonicalFile​(@NotNull
                                                    java.io.File file)
        Attempts to obtain canonical file from the specified file and if it fails returns absolute file.
        Parameters:
        file - file
        Returns:
        see above
      • checkTmpDir

        public static void checkTmpDir()
        Checks if it is allowed to use tmpDir taken from "java.io.tmpdir" system property
        Throws:
        java.lang.IllegalStateException - if there is no access to temp dir.
      • findFile

        @Nullable
        public static java.io.File findFile​(@NotNull
                                            java.io.FileFilter filter,
                                            @NotNull
                                            java.io.File... directories)
        Searches for a file in the specified directories recursively.
        Parameters:
        filter - filter which checks whether file is acceptable
        directories - directories to search for (recursively)
        Returns:
        first found file or null
      • findFiles

        @NotNull
        public static java.util.Collection<java.io.File> findFiles​(@NotNull
                                                                   java.io.FileFilter filter,
                                                                   @NotNull
                                                                   java.io.File... directories)
        Searches for files in the specified directories recursively.
        Parameters:
        filter - filter which checks whether file is acceptable
        directories - directories to search for (recursively)
        Returns:
        all found files
      • listFilesRecursively

        public static <C extends java.util.Collection<java.lang.String>> C listFilesRecursively​(@NotNull
                                                                                                java.io.File dir,
                                                                                                @NotNull
                                                                                                java.lang.String prefix,
                                                                                                boolean includeDirs,
                                                                                                int depthLimit,
                                                                                                @Nullable
                                                                                                Predicate<java.io.File> predicate,
                                                                                                @NotNull
                                                                                                C collection)
        Traverses the given directory and retrieves all files (and nested directories, if specified). Puts the found files and directories into the given collection as strings, where each string is a relative path from the given directory, with '/' path separator (independent on the current OS).

        If the includeDirs option is false, only files are listed. Empty directories are skipped. If this option is true, all directories are included (empty and non-empty) as separated entries.

        Type Parameters:
        C - type of the destination collection.
        Parameters:
        dir - directory to travers.
        prefix - prefix that will be able to each entry.
        includeDirs - include directories as separated entries.
        depthLimit - recursion depth; 0 means non-recursive; Integer.MAX_VALUE means infinite depth.
        predicate - a predicate that is applied to each file or directory; if not met - file or directory will not be included and the directory will not be traversed in.
        collection - destination collection where to put found file entries (must be writable).
        Returns:
        the given destination collection.
        Since:
        7.1
      • listFiles

        @NotNull
        public static java.io.File[] listFiles​(@NotNull
                                               java.io.File directory,
                                               @NotNull
                                               java.io.FilenameFilter filter)
        A simple wrapper around file.listFiles(filter) that handles possible null result. In this case an empty array is returned.
        Parameters:
        directory - the file
        filter - the filter to apply
        Returns:
        the array of inner file names (possibly empty)
      • listFiles

        @NotNull
        public static java.io.File[] listFiles​(@NotNull
                                               java.io.File directory)
        A simple wrapper around file.listFiles(filter) that handles possible null result. In this case an empty array is returned.
        Parameters:
        directory - the file
        Returns:
        the array of inner file names (possibly empty)
        Since:
        2022.1
      • getFreeSpace

        @Nullable
        public static java.lang.Long getFreeSpace​(@NotNull
                                                  java.io.File file)
        Computes free space on the disk that contains a file
        Parameters:
        file - file to select disk
        Returns:
        free space in bytes or null is operation is not supported by current JVM
        Since:
        5.0
      • getFreeSpaceKB

        @Deprecated
        @NotNull
        public static java.lang.Long getFreeSpaceKB​(@NotNull
                                                    java.io.File dir)
                                             throws java.io.IOException
        Deprecated.
        since 10.0. Use getFreeSpaceBytesSafe(File) instead
        Gets free space in kilobytes
        Parameters:
        dir - path to get free space for
        Returns:
        free space in kilobytes
        Throws:
        java.io.IOException - if an error occurs when finding the free space
      • freeSpaceKb

        public static long freeSpaceKb​(@NotNull
                                       java.lang.String path)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • getFreeSpaceBytesSafe

        @NotNull
        public static java.lang.Long getFreeSpaceBytesSafe​(@NotNull
                                                           java.io.File dir)
                                                    throws java.io.IOException
        Gets free space in bytes avoiding Long overflow if free space exceeds 2^63 bytes
        Parameters:
        dir - path to get free space for
        Returns:
        actual free space in bytes, if space does not exceed 2^63, Long.MAX_VALUE otherwise
        Throws:
        java.io.IOException - if an error occurs when finding the free space
      • copy

        public static void copy​(@NotNull
                                java.io.File from,
                                @NotNull
                                java.io.File to)
                         throws java.io.IOException
        Throws:
        java.io.IOException
      • copy

        public static void copy​(@NotNull
                                java.io.InputStream from,
                                @NotNull
                                java.io.File to)
                         throws java.io.IOException
        Throws:
        java.io.IOException
      • areTheSame

        public static boolean areTheSame​(@Nullable
                                         java.io.File file1,
                                         @Nullable
                                         java.io.File file2)
                                  throws java.io.IOException
        Checks that both file pointers specify the same object. So, in Linux it should denote symbolic links. In Windows it should take into account that names are case insensitive.

        Note: it also returns true if both pointers are null.

        Parameters:
        file1 - the first file pointer.
        file2 - the second file pointer.
        Returns:
        sameness.
        Throws:
        java.io.IOException
      • convertAntToRegexp

        @NotNull
        public static java.lang.String convertAntToRegexp​(@NotNull
                                                          java.lang.String antPattern)
      • convertAntToRegexp

        @NotNull
        public static java.lang.String convertAntToRegexp​(@NotNull
                                                          java.lang.String antPattern,
                                                          boolean ignoreStartingSlash)
        Parameters:
        antPattern - ant-style path pattern
        Returns:
        java regexp pattern. Note that no matter whether forward or backward slashes were used in the antPattern the returned regexp pattern will use forward slashes ('/') as file separators. Paths containing windows-style backslashes must be converted before matching against the resulting regexp
        See Also:
        FileUtil.toSystemIndependentName(java.lang.String)
      • getExtension

        @NotNull
        public static java.lang.String getExtension​(@NotNull
                                                    java.lang.String fileNameWithDirectory)
        Unlike com.intellij.openapi.util.io.FileUtil.getExtension, can use this with full file name (including directory name).
        Parameters:
        fileNameWithDirectory - full file name including directory
        Returns:
        file extension
      • getNameWithoutExtension

        @NotNull
        public static java.lang.String getNameWithoutExtension​(@NotNull
                                                               java.io.File file)
      • getNameWithoutExtension

        @NotNull
        public static java.lang.String getNameWithoutExtension​(@NotNull
                                                               java.lang.String name)
      • getName

        @NotNull
        public static java.lang.String getName​(@NotNull
                                               java.lang.String path)
        Gets name of the file in platform-independent way (unlike new File(path).getName()) For directories, gets name of the directory
        Since:
        2018.1.2
      • setExectuableAttribute

        public static void setExectuableAttribute​(@NotNull
                                                  java.lang.String path,
                                                  boolean executableFlag)
                                           throws java.io.IOException
        Set executable attribute, it makes sense only on non-windows platforms.
        Parameters:
        path - the path to use
        executableFlag - new value of executable attribute
        Throws:
        java.io.IOException - if there is a problem with setting the flag
      • checkContentEqual

        public static boolean checkContentEqual​(@NotNull
                                                java.io.File file1,
                                                @NotNull
                                                java.io.File file2)
        Check both files exist and are same byte-by-byte.
        Parameters:
        file1 - first file
        file2 - second file
        Returns:
        true if both files exist and have exactly same content
      • haveEqualContentIgnoringLineEndings

        public static boolean haveEqualContentIgnoringLineEndings​(@NotNull
                                                                  java.io.File file1,
                                                                  @NotNull
                                                                  java.io.File file2)
                                                           throws java.io.IOException
        Check both files exist and have same content ignoring line-endings and leading/trailing spaces.
        Parameters:
        file1 - first file
        file2 - second file
        Returns:
        true if both files exist and have same content
        Throws:
        java.io.IOException
      • isAncestor

        public static boolean isAncestor​(@NotNull
                                         java.io.File ancestor,
                                         @NotNull
                                         java.io.File file,
                                         boolean strict)
        Check if the ancestor is an ancestor of file. Overrides the same method from FileUtil. Please do not use the method from super class directly - it can cause the compilation problems.
        Parameters:
        ancestor - the file
        file - the file
        strict - if false then this method returns true if ancestor and file are equal
        Returns:
        true if ancestor is parent of file; false otherwise
      • copy

        public static void copy​(@NotNull
                                java.io.InputStream is,
                                @NotNull
                                java.io.OutputStream os)
                         throws java.io.IOException
        Same as copyStream.
        Throws:
        java.io.IOException
      • isBinaryFile

        public static boolean isBinaryFile​(@NotNull
                                           java.io.File file)
                                    throws java.io.IOException
        Returns whether a specified file is a binary file.
        Parameters:
        file - the file to analyse
        Returns:
        true iff file is binary
        Throws:
        java.io.IOException - in case of I/O errors
      • isBinaryData

        public static boolean isBinaryData​(@NotNull
                                           byte[] data,
                                           int size)
        Returns whether specified byte array represents binary data (not text)
        Parameters:
        data - the byte array
        size - size to check
        Returns:
        true iff data array represents binary data
      • isTextData

        public static boolean isTextData​(@NotNull
                                         byte[] data,
                                         int size)
        Returns whether specified byte array represents text data (not binary)
        Parameters:
        data - the byte array
        size - size to check
        Returns:
        true iff data array represents text data
      • isSymlink

        public static boolean isSymlink​(@NotNull
                                        java.io.File file)
        Checks whether file is a symlink by resolving absolute path into real (canonical) one

        Note that if NIO.2 API is unavailable (Java 1.6 and earlier), symbolic links can't be reliably detected in the following cases:

        • broken links in UNIX (link -> nonexistent, indirectly detectable via checking that File.isFile() and File.isDirectory()) both return false;
        • (broken) links referencing themselves in UNIX (link -> link);
        • (broken) cyclic links in UNIX (link0 -> link1, link1 -> link0);
        • NTFS links.

        Hard links (to files, Windows(NTFS)/Linux/Solaris) and directory junctions (NTFS) are not detectable even using NIO.2 API.

        Parameters:
        file - to check
        Returns:
        true if the file is a symlink, false otherwise
        Since:
        8.1
      • createSymlink

        public static boolean createSymlink​(@NotNull
                                            java.io.File target,
                                            @NotNull
                                            java.io.File symlinkFile)
        Attempts to create a symlink at symlinkFile that points to target
        Parameters:
        target - - file or directory that symlink will point to
        symlinkFile - - a symlink location
        Returns:
        true if symlink was created and points to the desired file/directory.
        false otherwise
        Since:
        8.1
      • getNameOrAbsolutePath

        public static java.lang.String getNameOrAbsolutePath​(@NotNull
                                                             java.io.File baseDir,
                                                             @NotNull
                                                             java.io.File checkDir)
        Checks whether directory lies directly under baseDir. Returns its name when true and absolute path otherwise.
        Parameters:
        checkDir - - dir to check
        baseDir - - base dir to check against
        Returns:
        checkDir name, if it lies directly under baseDir and absolute path of checkDir otherwise.
        Since:
        8.1
      • getUTF8Reader

        public static java.io.Reader getUTF8Reader​(@NotNull
                                                   java.io.File file)
                                            throws java.io.FileNotFoundException
        Returns Reader with utf-8 encoding to read the file, because FileReader uses default platform encoding
        Parameters:
        file - file to read
        Returns:
        Reader to use
        Throws:
        java.io.FileNotFoundException - if FileNotFoundException exception occurs