Class CmsFileUtil
- Since:
- 6.0.0
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
Data bean which walkFileSystem passes to its callback. -
Method Summary
Modifier and TypeMethodDescriptionstatic String
addTrailingSeparator
(String path) Adds a trailing separator to a path if required.static void
checkResources
(CmsObject cms, List<String> resources) Checks if all resources are present.static void
Simply version of a 1:1 binary file copy.static String
formatFilesize
(long filesize, Locale locale) Returns the formatted filesize to Bytes, KB, MB or GB depending on the given value.static String
formatResourceNames
(CmsRequestContext context, List<CmsResource> resources) Returns a comma separated list of resource paths names, with the site root from the given OpenCms user context removed.static String
getEncoding
(CmsObject cms, CmsResource file) Returns the encoding of the file.static String
getExtension
(String resourceName) Returns the extension of the given resource name, that is the part behind the last '.' char, converted to lower case letters.static String
getFileExtension
(String filename) Deprecated.getFiles
(String name, FileFilter filter, boolean includeSubtree) Returns a list of all filtered files in the RFS.static String
getRepositoryName
(String repository, String vfspath, boolean online) Returns the file name for a given VFS name that has to be written to a repository in the "real" file system, by appending the VFS root path to the given base repository path, also adding an folder for the "online" or "offline" project.static String
getRfsPath
(String filename, String extension, String parameters) Creates unique, valid RFS name for the given filename that contains a coded version of the given parameters, with the given file extension appended.static String
normalizePath
(String path) Normalizes a file path that might contain'../'
or'./'
or'//'
elements to a normal absolute path, the path separator char used isFile.separatorChar
.static String
normalizePath
(String path, char separatorChar) Normalizes a file path that might contain'../'
or'./'
or'//'
elements to a normal absolute path.static String
normalizePath
(URL url) Returns the normalized file path created from the given URL.static String
normalizePath
(URL url, char separatorChar) Returns the normalized file path created from the given URL.static void
purgeDirectory
(File directory) Deletes a directory in the file system and all subfolders of that directory.static byte[]
Reads a file from the RFS and returns the file content.static byte[]
Reads a file with the given name from the class loader and returns the file content.static String
Reads a file from the class loader and converts it to a String with the specified encoding.static byte[]
readFully
(InputStream in) Reads all bytes from the given input stream, closes it and returns the result in an array.static byte[]
readFully
(InputStream in, boolean closeInputStream) Reads all bytes from the given input stream, conditionally closes the given input stream and returns the result in an array.static byte[]
readFully
(InputStream in, int size) Reads the specified number of bytes from the given input stream and returns the result in an array.static byte[]
readFully
(InputStream in, int size, boolean closeStream) Reads the specified number of bytes from the given input stream, conditionally closes the stream and returns the result in an array.static String
removeLeadingSeparator
(String path) Removes a leading separator from a path if required.removeRedundancies
(List<String> resourcenames) Removes all resource names in the given List that are "redundant" because the parent folder name is also contained in the List.static List<CmsResource>
removeRedundantResources
(List<CmsResource> resources) Removes all resources in the given List that are "redundant" because the parent folder is also contained in the List.static String
Removes a trailing separator from a path if required.static String
searchWebInfFolder
(String startFolder) Searches for the OpenCms web application 'WEB-INF' folder during system startup, code ornull
if the 'WEB-INF' folder can not be found.static String
static void
walkFileSystem
(File base, org.apache.commons.collections.Closure action) Traverses the file system starting from a base folder and executes a callback for every directory found.
-
Method Details
-
addTrailingSeparator
Adds a trailing separator to a path if required.- Parameters:
path
- the path to add the trailing separator to- Returns:
- the path with a trailing separator
-
checkResources
public static void checkResources(CmsObject cms, List<String> resources) throws CmsIllegalArgumentException Checks if all resources are present.- Parameters:
cms
- an initialized OpenCms user context which must have read access to all resourcesresources
- a list of vfs resource names to check- Throws:
CmsIllegalArgumentException
- in case not all resources exist or can be read with the given OpenCms user context
-
copy
Simply version of a 1:1 binary file copy.- Parameters:
fromFile
- the name of the file to copytoFile
- the name of the target file- Throws:
IOException
- if any IO error occurs during the copy operation
-
formatFilesize
Returns the formatted filesize to Bytes, KB, MB or GB depending on the given value.- Parameters:
filesize
- in byteslocale
- the locale of the current OpenCms user or the System's default locale if the first choice is not at hand.- Returns:
- the formatted filesize to Bytes, KB, MB or GB depending on the given value
-
formatResourceNames
Returns a comma separated list of resource paths names, with the site root from the given OpenCms user context removed.- Parameters:
context
- the current users OpenCms context (optional, may benull
)resources
- a List of
instances to get the names fromCmsResource
- Returns:
- a comma separated list of resource paths names
-
getEncoding
Returns the encoding of the file. Encoding is read from the content-encoding property and defaults to the systems default encoding. Since properties can change without rewriting content, the actual encoding can differ.- Parameters:
cms
-CmsObject
used to read properties of the given file.file
- the file for which the encoding is requested- Returns:
- the file's encoding according to the content-encoding property, or the system's default encoding as default.
-
getExtension
Returns the extension of the given resource name, that is the part behind the last '.' char, converted to lower case letters.The extension of a file is the part of the name after the last dot, including the dot. The extension of a folder is empty. All extensions are returned as lower case
Please note: No check is performed to ensure the given file name is not
null
.Examples:
/folder.test/
has an empty extension./folder.test/config
has an empty extension./strange.filename.
has an empty extension./document.PDF
has the extension.pdf
.
- Parameters:
resourceName
- the resource to get the extension for- Returns:
- the extension of a resource
-
getFileExtension
Deprecated.usegetExtension(String)
instead, it is better implementedReturns the extension of the given file name, that is the part behind the last '.' char, converted to lower case letters.The result does contain the '.' char. For example, if the input is
"opencms.html"
, then the result will be".html"
.If the given file name does not contain a '.' char, the empty String
""
is returned.Please note: No check is performed to ensure the given file name is not
null
.- Parameters:
filename
- the file name to get the extension for- Returns:
- the extension of the given file name
-
getFiles
Returns a list of all filtered files in the RFS.If the
name
is not a folder the folder that contains the given file will be used instead.Despite the filter may not accept folders, every subfolder is traversed if the
includeSubtree
parameter is set.- Parameters:
name
- a folder or file namefilter
- a filterincludeSubtree
- if to include subfolders- Returns:
- a list of filtered
objectsFile
-
getRepositoryName
Returns the file name for a given VFS name that has to be written to a repository in the "real" file system, by appending the VFS root path to the given base repository path, also adding an folder for the "online" or "offline" project.- Parameters:
repository
- the base repository pathvfspath
- the VFS root path to write to useonline
- flag indicates if the result should be used for the online project (true
) or not- Returns:
- The full uri to the JSP
-
getRfsPath
Creates unique, valid RFS name for the given filename that contains a coded version of the given parameters, with the given file extension appended.This is used to create file names for the static export, or in a vfs disk cache.
- Parameters:
filename
- the base file nameextension
- the extension to useparameters
- the parameters to code in the result file name- Returns:
- a unique, valid RFS name for the given parameters
- See Also:
-
normalizePath
Normalizes a file path that might contain'../'
or'./'
or'//'
elements to a normal absolute path, the path separator char used isFile.separatorChar
.- Parameters:
path
- the path to normalize- Returns:
- the normalized path
- See Also:
-
normalizePath
Normalizes a file path that might contain'../'
or'./'
or'//'
elements to a normal absolute path.Can also handle Windows like path information containing a drive letter, like
C:\path\..\
.- Parameters:
path
- the path to normalizeseparatorChar
- the file separator char to use, for exampleFile.separatorChar
- Returns:
- the normalized path
-
normalizePath
Returns the normalized file path created from the given URL.The path part
URL.getPath()
is used, unescaped and normalized usingnormalizePath(String, char)
usingFile.separatorChar
.- Parameters:
url
- the URL to extract the path information from- Returns:
- the normalized file path created from the given URL using
File.separatorChar
- See Also:
-
normalizePath
Returns the normalized file path created from the given URL.The path part
URL.getPath()
is used, unescaped and normalized usingnormalizePath(String, char)
.- Parameters:
url
- the URL to extract the path information fromseparatorChar
- the file separator char to use, for exampleFile.separatorChar
- Returns:
- the normalized file path created from the given URL
-
purgeDirectory
Deletes a directory in the file system and all subfolders of that directory.- Parameters:
directory
- the directory to delete
-
readFile
Reads a file from the RFS and returns the file content.- Parameters:
file
- the file to read- Returns:
- the read file content
- Throws:
IOException
- in case of file access errors
-
readFile
Reads a file with the given name from the class loader and returns the file content.- Parameters:
filename
- the file to read- Returns:
- the read file content
- Throws:
IOException
- in case of file access errors
-
readFile
Reads a file from the class loader and converts it to a String with the specified encoding.- Parameters:
filename
- the file to readencoding
- the encoding to use when converting the file content to a String- Returns:
- the read file convered to a String
- Throws:
IOException
- in case of file access errors
-
readFully
Reads all bytes from the given input stream, closes it and returns the result in an array.- Parameters:
in
- the input stream to read the bytes from- Returns:
- the byte content of the input stream
- Throws:
IOException
- in case of errors in the underlying java.io methods used
-
readFully
Reads all bytes from the given input stream, conditionally closes the given input stream and returns the result in an array.- Parameters:
in
- the input stream to read the bytes fromcloseInputStream
- if true the given stream will be closed afterwards- Returns:
- the byte content of the input stream
- Throws:
IOException
- in case of errors in the underlying java.io methods used
-
readFully
Reads the specified number of bytes from the given input stream and returns the result in an array.- Parameters:
in
- the input stream to read the bytes fromsize
- the number of bytes to read- Returns:
- the byte content read from the input stream
- Throws:
IOException
- in case of errors in the underlying java.io methods used
-
readFully
Reads the specified number of bytes from the given input stream, conditionally closes the stream and returns the result in an array.- Parameters:
in
- the input stream to read the bytes fromsize
- the number of bytes to readcloseStream
- if true the given stream will be closed- Returns:
- the byte content read from the input stream
- Throws:
IOException
- in case of errors in the underlying java.io methods used
-
removeLeadingSeparator
Removes a leading separator from a path if required.- Parameters:
path
- the path to remove the leading separator from- Returns:
- the path without a trailing separator
-
removeRedundancies
Removes all resource names in the given List that are "redundant" because the parent folder name is also contained in the List.The content of the input list is not modified.
- Parameters:
resourcenames
- a list of VFS pathnames to check for redundencies (Strings)- Returns:
- a new list with all redundancies removed
- See Also:
-
removeRedundantResources
Removes all resources in the given List that are "redundant" because the parent folder is also contained in the List.The content of the input list is not modified.
- Parameters:
resources
- a list of
objects to check for redundanciesCmsResource
- Returns:
- a the given list with all redundancies removed
- See Also:
-
removeTrailingSeparator
Removes a trailing separator from a path if required.In case we have the root folder "/", the separator is not removed.
- Parameters:
path
- the path to remove the trailing separator from- Returns:
- the path without a trailing separator
-
searchWebInfFolder
Searches for the OpenCms web application 'WEB-INF' folder during system startup, code ornull
if the 'WEB-INF' folder can not be found.- Parameters:
startFolder
- the folder where to start searching- Returns:
- String the path of the 'WEB-INF' folder in the 'real' file system, or
null
-
toggleTrailingSeparator
-
walkFileSystem
Traverses the file system starting from a base folder and executes a callback for every directory found.- Parameters:
base
- the base folderaction
- a callback which will be passed a FileWalkState object for every directory encountered
-
getExtension(String)
instead, it is better implemented