Class FileUtil
- java.lang.Object
-
- com.intellij.openapi.util.io.FileUtil
-
- jetbrains.buildServer.util.FileUtil
-
public class FileUtil extends com.intellij.openapi.util.io.FileUtil
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FileUtil.DeleteState
static interface
FileUtil.ErrorReporter
Used to report file operation errors to some logstatic interface
FileUtil.FilesDeleteListener
static interface
FileUtil.IOAction
static interface
FileUtil.Processor
static class
FileUtil.RegexFileFilter
File filter that accepts files with the name specified by a regular expression.
-
Field Summary
Fields Modifier and Type Field Description static java.io.FileFilter
ACCEPT_ALL_FILES_FILTER
static java.lang.String
DIST_SUFFIX
-
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) thefrom
file to theto
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 propertystatic void
close(java.io.Closeable e)
Closes a resource if it is not null All possible IOExceptions are ignoredstatic void
close(java.util.zip.ZipFile e)
Closes a resource if it is not null All possible IOExceptions are ignoredstatic void
closeAll(java.io.Closeable... toClose)
Closes all not-null resources All possible IOExceptions are ignoredstatic 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.UsecopyResource(Class, String, java.io.File)
to overcome classloader change issuesstatic 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 (seecopyResource(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 (seecopyResource(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 atsymlinkFile
that points totarget
static java.io.File
createTempDirectory(java.lang.String prefix, java.lang.String suffix)
Overrides the same method fromFileUtil
.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 fromFileUtil
.static java.io.File
createTempFile(java.lang.String prefix, java.lang.String suffix)
Overrides the same method fromFileUtil
.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 numAttemptsstatic java.util.Set<java.io.File>
delete(java.io.File fileOrDirectory, java.io.FileFilter fileFilter, int numAttempts, FileUtil.FilesDeleteListener deleteListener)
Removes files infileOrDirectory
, skipping all files that do not matchfileFilter
as well as all their subtitles/subfolders iffileFilter
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 emptystatic 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 filestatic java.lang.Long
getFreeSpaceBytesSafe(java.io.File dir)
Gets free space in bytes avoidingLong
overflow if free space exceeds 2^63 bytesstatic 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 directorystatic 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 fromFileUtil
.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 encodingstatic 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 theancestor
is an ancestor offile
.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 specifiedfile
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 otherwisestatic boolean
isSymlink(java.io.File file)
Checks whetherfile
is a symlink by resolving absolute path into real (canonical) onestatic 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 aroundfile.listFiles(filter)
that handles possiblenull
result.static java.io.File[]
listFiles(java.io.File directory, java.io.FilenameFilter filter)
A simple wrapper aroundfile.listFiles(filter)
that handles possiblenull
result.static <C extends java.util.Collection<java.lang.String>>
ClistFilesRecursively(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.separatorCharstatic 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.usedelete(File)
static void
symlinkAwareDelete(java.io.File fileOrDirectory, java.io.FileFilter fileFilter, int numAttempts)
Deprecated.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
-
-
-
-
Field Detail
-
ACCEPT_ALL_FILES_FILTER
public static final java.io.FileFilter ACCEPT_ALL_FILES_FILTER
-
DIST_SUFFIX
public static final java.lang.String DIST_SUFFIX
- See Also:
- Constant Field Values
-
-
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 readencoding
- 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. UsewriteFileAndReportErrors(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 writetext
- 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 totext
- 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 totext
- text to write in the filecharset
- encoding (seeStandardCharsets
)- 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 totext
- text to write in fileencoding
- 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 fromFileUtil
.- 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 fromFileUtil
.- 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 fromFileUtil
.- Throws:
java.io.IOException
-
getTempDirectory
@NotNull public static java.lang.String getTempDirectory()
Overrides the same method fromFileUtil
.
-
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 fileneededFileName
- 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 directoryto
- target directoryreporter
- used to report text errors during the move- Returns:
- true if
fromDir
was moved toto
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 + deleteDoes not override existing target files.
- Parameters:
from
- source file or directoryto
- target file or directoryreporter
- 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 filecontent
- content to write, the stream will be closed after writingbeforeWriteAction
- 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) thefrom
file to theto
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 throwsIOException
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 pathpath
- 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.UsecopyResource(Class, String, java.io.File)
to overcome classloader change issuesCopies contents of the specified resource into the specified file.- Parameters:
resourceName
- Name of the classpath resourceoutputFile
- 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. UsesClass.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 resourceresourceName
- Name of the classpath resourceoutputFile
- 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 (seecopyResource(Class, String, java.io.File)
).- Parameters:
clazz
- class from the class loader that can access the resourceresourceName
- the name of the classpath resourceoutputFile
- 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 (seecopyResource(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 resourceresourceName
- the name of the classpath resourceoutputFile
- 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 copyoffset
- file offsetlength
- length of datadestination
- 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 copyoffset
- file offsetlength
- length of datadestination
- 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. ThrowsIOException
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 removenumAttempts
- 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.usedelete(File)
Removes specified directory or file. On Unix it doesn't remove contents of the symlink dir if it points outside of thefileOrDirectory
. On Windows no such checks are performed and this method behaves in the same way asdelete(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)
Deprecated.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 thefileOrDirectory
. On Windows no such checks are performed and this method behaves in the same way asdelete(java.io.File, java.io.FileFilter, int)
.- Parameters:
fileOrDirectory
- file or directory to removenumAttempts
- 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 removenumAttempts
- 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 infileOrDirectory
, skipping all files that do not matchfileFilter
as well as all their subtitles/subfolders iffileFilter
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 acceptabledirectories
- 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 acceptabledirectories
- 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 aroundfile.listFiles(filter)
that handles possiblenull
result. In this case an empty array is returned.- Parameters:
directory
- the filefilter
- 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 aroundfile.listFiles(filter)
that handles possiblenull
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. UsegetFreeSpaceBytesSafe(File)
insteadGets 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 avoidingLong
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 useexecutableFlag
- 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 filefile2
- 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 filefile2
- 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 theancestor
is an ancestor offile
. Overrides the same method fromFileUtil
. Please do not use the method from super class directly - it can cause the compilation problems.- Parameters:
ancestor
- the filefile
- the filestrict
- iffalse
then this method returnstrue
ifancestor
andfile
are equal- Returns:
true
ifancestor
is parent offile
;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 specifiedfile
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 arraysize
- 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 arraysize
- size to check- Returns:
- true iff
data
array represents text data
-
isSymlink
public static boolean isSymlink(@NotNull java.io.File file)
Checks whetherfile
is a symlink by resolving absolute path into real (canonical) oneNote 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 thatFile.isFile()
andFile.isDirectory()
) both returnfalse
; - (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
- broken links in UNIX (
-
createSymlink
public static boolean createSymlink(@NotNull java.io.File target, @NotNull java.io.File symlinkFile)
Attempts to create a symlink atsymlinkFile
that points totarget
- Parameters:
target
- - file or directory that symlink will point tosymlinkFile
- - 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 checkbaseDir
- - 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
-
-