public class FileUtil extends Object
Modifier and Type | Field and Description |
---|---|
private static int |
BUFFER_SIZE |
Constructor and Description |
---|
FileUtil() |
Modifier and Type | Method and Description |
---|---|
static boolean |
checkMagicNumber(PushbackInputStream pin,
byte[] bCheck)
Take a peek at an input stream and check if the first few bytes
matches the bCheck parameter.
|
static void |
close(InputStream in)
Close an input stream without throwing an exception.
|
static void |
close(OutputStream out)
Close an output stream without throwing an exception.
|
static long |
copy(InputStream in,
OutputStream out)
Copy from the input stream to the output stream
until end of file is reached.
|
static long |
copy(InputStream in,
OutputStream out,
AbsoluteProgressReporter progress)
Copy from the input stream to the output stream
until end of file is reached.
|
static long |
copy(Reader in,
Writer out)
Copy from the reader to the writer until end of file is reached.
|
static long |
copy(Reader in,
Writer out,
AbsoluteProgressReporter progress)
Copy from the reader to the writer until end of file is reached.
|
static File |
createTempDirectory(String prefix,
String suffix,
File directory)
Creates a temporary directory.
|
static int |
deleteEmptyDirectories(File root,
boolean deleteRoot)
Deletes all empty subdirectories and, optionally, also
the root directory.
|
static int |
deleteTempDirectory(File root)
Recursively delete all files and subdirectories within a given
directory and the also the given directory itself.
|
static void |
doRecursively(DbControl dc,
Directory root,
Filter<? super Directory> dirFilter,
Filter<? super File> fileFilter)
Do something recursively to all files and sub-directories in
specified root directory.
|
static List<File> |
findFiles(File directory,
FileFilter filter)
Find files matching a given filter in a directory.
|
static Map<Directory,List<Directory>> |
getDirectoryTree(DbControl dc,
Directory directory)
Get the complete tree of sub-directories from a given directory.
|
static InputStream |
getInputStream(File file)
Get a buffered
InputStream object reading from
the specified file. |
static OutputStream |
getOutputStream(File file)
Get a buffered
OutputStream object writing to
the specified file. |
static Map<Directory,List<Directory>> |
loadMinimalDirectoryTree(DbControl dc,
Directory... directories)
Load a minimal directory tree that includes at least all the specified directories
and their parent directories all the way up to the root or as far as the logged in user
has read permission.
|
static long |
read(InputStream in)
Read from the input stream until the end is reached.
|
static List<File> |
uploadFiles(DbControl dc,
Directory toDir,
File fromDir,
FileFilter filter,
boolean overwrite,
ProgressReporter progress)
Upload multiple files to BASE.
|
private static final int BUFFER_SIZE
public static long copy(InputStream in, OutputStream out) throws IOException
in
- The InputStream
to read fromout
- The OutputStream
to write toIOException
- This exception is thrown if there is an errorpublic static long copy(InputStream in, OutputStream out, AbsoluteProgressReporter progress) throws IOException
in
- The InputStream
to read fromout
- The OutputStream
to write toprogress
- An optional progress reporterIOException
- This exception is thrown if there is an errorpublic static long copy(Reader in, Writer out) throws IOException
in
- The Reader
to read fromout
- The Writer
to write toIOException
- This exception is thrown if there is an errorpublic static long copy(Reader in, Writer out, AbsoluteProgressReporter progress) throws IOException
in
- The Reader
to read fromout
- The Writer
to write toprogress
- An optional progress reporterIOException
- This exception is thrown if there is an errorpublic static long read(InputStream in) throws IOException
in
- The InputStream
to read fromIOException
- This exception is thrown if there is an errorpublic static void close(InputStream in)
in
- The input stream to closepublic static void close(OutputStream out)
out
- The output stream to closepublic static InputStream getInputStream(File file) throws IOException
InputStream
object reading from
the specified file.file
- The path to the file to read fromInputStream
IOException
- If the stream cannot be openedpublic static OutputStream getOutputStream(File file) throws IOException
OutputStream
object writing to
the specified file.file
- The path to the file to write toOutputStream
IOException
- If the stream cannot be openedpublic static boolean checkMagicNumber(PushbackInputStream pin, byte[] bCheck) throws IOException
bCheck = new byte[] { 0x1f, (byte)0x8b };
pin
- The input stream to read from which must have
large enough buffer to be able to unread the bytesbCheck
- The byte values to use for comparisonIOException
- If there is an error reading or unreading
the bytesNullPointerException
- If pin or bCheck is nullIllegalArgumentException
- If bCheck is zero lengthpublic static Map<Directory,List<Directory>> getDirectoryTree(DbControl dc, Directory directory) throws InvalidDataException, BaseException
NOTE!!! This method has very bad performance on large directory trees.
Consider if it is not possible to use the loadMinimalDirectoryTree(DbControl, Directory...)
instead together with lazy loading of subdirectories.
dc
- DbControl used to access the database.directory
- The directory to start withMap
which maps a directory to a
list of it's sub-directories. Directories without sub-directories
are not included in the map.InvalidDataException
- If the directory is nullBaseException
- If there is another errorpublic static Map<Directory,List<Directory>> loadMinimalDirectoryTree(DbControl dc, Directory... directories) throws InvalidDataException, BaseException
dc
- A DbControl for accessing the databasedirectories
- An array of directoriesMap
which maps a directory to a
list of it's sub-directories. The map is guaranteed to contain an entry for each of
the given directories, but the list may be empty if there are no subdirectoriesBaseException
- If there is an errorInvalidDataException
public static List<File> findFiles(File directory, FileFilter filter)
RegexpFileFilter
to look for files
matching a regular expression.directory
- The parent directory to search infilter
- A filter which specifies which files to find, or null
to find all filesRegexpFileFilter
public static int deleteEmptyDirectories(File root, boolean deleteRoot)
root
- The root directory to start looking indeleteRoot
- TRUE to also delete the root directory
if it is empty, FALSE to leave itpublic static void doRecursively(DbControl dc, Directory root, Filter<? super Directory> dirFilter, Filter<? super File> fileFilter)
Filter.evaluate(Object)
method returns TRUE.
Files are only loaded if a file filter is specified. The
return value of the evaluate
method is ignored.
The files and directories may be processed in any order.
NOTE! The intention of this method is that the filter should have have a "side-effect" that does some work on the files/ sub-directories.
dc
- A DbControl to use for database accessroot
- The root directorydirFilter
- A filter that selects/rejects sub-directoriesfileFilter
- A filter that does something with the filepublic static File createTempDirectory(String prefix, String suffix, File directory) throws IOException
File.createTempFile(String, String, File)
method to first crete a temporary
file, that is then deleted and made into a directory instead. This should
ensure that a new empty directory is created each time this method is called.
The "temporary" nature of this method doesn't involve cleaning up or removing
the created directory. It is the responsibility of the calling code to remove
every file and subdirectory as well as the returned directory. This can
for example be done with the deleteTempDirectory(File)
method.prefix
- A prefix that is used in the directory name
it must be at least 3 characters long.suffix
- An optional suffix for the directory namedirectory
- An optional parent directory in which the temporary
directory should be created, or null to use the system temporary
directoryIOException
- If there is a problem with the directory creationFile.createTempFile(String, String, File)
public static int deleteTempDirectory(File root)
root
- The root directory to start looking inpublic static List<File> uploadFiles(DbControl dc, Directory toDir, File fromDir, FileFilter filter, boolean overwrite, ProgressReporter progress) throws IOException
toDir
- The directory in the BASE file system that the files should
be uploaded tofromDir
- The directory in the local file system to scan for files
to upload if the directory doesn't exists or is empty an empty list is
returnedfilter
- An optional filter that decides which files that should
be uploaded or not, if null all files, including subdirectories, are
uploadedoverwrite
- TRUE if existing files should be overwritten, FALSE to
only overwrite files that have been marked for removalprogress
- An optional progress reporterIOException