This class provides basic facilities for manipulating files and file paths.
Path-related methods
Methods exist to retrieve the components of a typical file path. For example
/www/hosted/mysite/index.html
, can be broken into:
/www/hosted/mysite/
-- retrievable through FileUtils
index.html
-- retrievable through FileUtils
/www/hosted/mysite/index
-- retrievable through FileUtils
html
-- retrievable through FileUtils
There are also methods to
concatenate two paths
,
resolve a
path relative to a File
and
FileUtils
a path.
File-related methods
There are methods to create a
File from a URL
, copy a
File to a directory
,
copy a
File to another File
,
copy a
URL's contents to a File
,
as well as methods to
delete
and
clean
a directory.
Common
java.io.File
manipulation routines.
Origin of code
- commons-utils repo
- Alexandria's FileUtils.
- Avalon Excalibur's IO.
byteCountToDisplaySize
public static String byteCountToDisplaySize(long size)
Returns a human-readable version of the file size (original is in
bytes).
size
- The number of bytes.
- A human-readable display value (includes units).
cleanDirectory
public static void cleanDirectory(File directory)
throws IOException
Clean a directory without deleting it.
directory
- directory to clean
cleanDirectoryOnExit
private static void cleanDirectoryOnExit(File directory)
throws IOException
Clean a directory without deleting it.
directory
- directory to clean.
contentEquals
public static boolean contentEquals(File file1,
File file2)
throws IOException
Compare the contents of two files to determine if they are equal or not.
Code origin: Avalon
file1
- the first filefile2
- the second file
- true if the content of the files are equal or they both don't exist, false otherwise
convertFileCollectionToFileArray
public static File[] convertFileCollectionToFileArray(Collection files)
Converts a Collection containing java.io.File instanced into array
representation. This is to account for the difference between
File.listFiles() and FileUtils.listFiles().
files
- a Collection containing java.io.File instances
copyFile
public static void copyFile(File source,
File destination)
throws IOException
Copy file from source to destination. The directories up to
destination
will be created if they don't already exist.
destination
will be overwritten if it already exists.
The copy will have the same file date as the original.
source
- An existing non-directory File
to copy
bytes from.destination
- A non-directory File
to write bytes to
(possibly overwriting).
copyFile
public static void copyFile(File source,
File destination,
boolean preserveFileDate)
throws IOException
Copy file from source to destination. The directories up to
destination
will be created if they don't already exist.
destination
will be overwritten if it already exists.
source
- An existing non-directory File
to copy
bytes from.destination
- A non-directory File
to write bytes to
(possibly overwriting).preserveFileDate
- True if the file date of the copy should be the
same as the original.
copyFileToDirectory
public static void copyFileToDirectory(File source,
File destinationDirectory)
throws IOException
Copy file from source to destination. If destinationDirectory
does not exist, it
(and any parent directories) will be created. If a file source
in
destinationDirectory
exists, it will be overwritten.
The copy will have the same file date as the original.
source
- An existing File
to copy.destinationDirectory
- A directory to copy source
into.
copyURLToFile
public static void copyURLToFile(URL source,
File destination)
throws IOException
Copies bytes from the URL source
to a file destination
.
The directories up to destination
will be created if they don't already exist.
destination
will be overwritten if it already exists.
source
- A URL
to copy bytes from.destination
- A non-directory File
to write bytes to (possibly
overwriting).
deleteDirectory
public static void deleteDirectory(File directory)
throws IOException
Recursively delete a directory.
directory
- directory to delete
deleteDirectoryOnExit
private static void deleteDirectoryOnExit(File directory)
throws IOException
Recursively schedule directory for deletion on JVM exit.
directory
- directory to delete.
forceDelete
public static void forceDelete(File file)
throws IOException
Delete a file. If file is a directory, delete it and all sub-directories.
The difference between File.delete() and this method are:
- A directory to be deleted does not have to be empty.
- You get exceptions when a file or directory cannot be deleted.
(java.io.File methods returns a boolean)
file
- file or directory to delete.
forceDeleteOnExit
public static void forceDeleteOnExit(File file)
throws IOException
Schedule a file to be deleted when JVM exits.
If file is directory delete it and all sub-directories.
file
- file or directory to delete.
forceMkdir
public static void forceMkdir(File directory)
throws IOException
Make a directory. If there already exists a file with specified name or
the directory cannot be created then an exception is thrown.
directory
- directory to create
innerListFiles
private static void innerListFiles(Collection files,
File directory,
IOFileFilter filter)
isFileNewer
public static boolean isFileNewer(File file,
Date date)
Tests if the specified File
is newer than the specified
Date
file
- the File
of which the modification date must be compareddate
- the date reference
- true if the
File
exists and has been modified after
the given Date
.
isFileNewer
public static boolean isFileNewer(File file,
File reference)
Tests if the specified File
is newer than the reference
File
.
file
- the File
of which the modification date must be comparedreference
- the File
of which the modification date is used
like reference
- true if the
File
exists and has been modified more recently
than the reference File
.
isFileNewer
public static boolean isFileNewer(File file,
long timeMillis)
Tests if the specified File
is newer than the specified
time reference.
file
- the File
of which the modification date must be compared.timeMillis
- the time reference measured in milliseconds since the epoch
(00:00:00 GMT, January 1, 1970)
- true if the
File
exists and has been modified after
the given time reference.
listFiles
public static Collection listFiles(File directory,
String[] extensions,
boolean recursive)
Finds files within a given directory (and optionally its subdirectories)
which match an array of extensions.
directory
- the directory to search inextensions
- an array of extensions, ex. {"java","xml"}. If this
parameter is null, all files are returned.recursive
- If true all subdirectories are searched, too.
- an collection of java.io.File with the matching files
listFiles
public static Collection listFiles(File directory,
IOFileFilter fileFilter,
IOFileFilter dirFilter)
Finds files within a given directory (and optionally its
subdirectories). All files found are filtered by an IOFileFilter.
If your search should recurse into subdirectories you can pass in
an IOFileFilter for directories. You don't need to bind a
DirectoryFileFilter (via logical AND) to this filter. This method does
that for you.
An example: If you want to search through all directories called
"temp" you pass in
FileFilterUtils.NameFileFilter("temp")
Another common usage of this method is find files in a directory
tree but ignoring the directories generated CVS. You can simply pass
in
FileFilterUtils.makeCVSAware(null)
.
directory
- the directory to search infileFilter
- filter to apply when finding files.dirFilter
- optional filter to apply when finding subdirectories.
If this parameter is null, subdirectories will not be included in the
search. Use TrueFileFilter.INSTANCE to match all directories.
- an collection of java.io.File with the matching files
readFileToString
public static String readFileToString(File file,
String encoding)
throws IOException
Reads the contents of a file into a String.
There is no readFileToString method without encoding parameter because
the default encoding can differ between platforms and therefore results
in inconsistent results.
file
- the file to read.encoding
- the encoding to use
- The file contents or null if read failed.
sizeOfDirectory
public static long sizeOfDirectory(File directory)
Recursively count size of a directory (sum of the length of all files).
directory
- directory to inspect
- size of directory in bytes.
toFile
public static File toFile(URL url)
Convert from a URL
to a File
.
- The equivalent
File
object, or null
if the URL's protocol
is not file
toSuffixes
private static String[] toSuffixes(String[] extensions)
Converts an array of file extensions to suffixes for use
with IOFileFilters.
extensions
- an array of extensions. Format: {"java", "xml"}
- an array of suffixes. Format: {".java", ".xml"}
toURLs
public static URL[] toURLs(File[] files)
throws IOException
Convert the array of Files into a list of URLs.
files
- the array of files
touch
public static void touch(File file)
throws IOException
Implements the same behaviour as the "touch" utility on Unix. It creates
a new file with size 0 or, if the file exists already, it is opened and
closed without modifying it, but updating the file date and time.
waitFor
public static boolean waitFor(File file,
int seconds)
Waits for NFS to propagate a file creation, imposing a timeout.
file
- The fileseconds
- The maximum time in seconds to wait.
- True if file exists.
TODO Needs a clearer javadoc to see its real purpose for someone without
NFS-knowledge.
writeStringToFile
public static void writeStringToFile(File file,
String data,
String encoding)
throws IOException
Writes data to a file. The file will be created if it does not exist.
There is no readFileToString method without encoding parameter because
the default encoding can differ between platforms and therefore results
in inconsistent results.
file
- the file to write.data
- The content to write to the file.encoding
- encoding to use