文件操作工具。
此外 commons-io、commons-vfs、多个 IOUtils 类里还有不少好工具。
| Type | Name and description |
|---|---|
static boolean |
combineFiles(List srcFiles, Object dest, boolean deleteSrc = false)合并多个文件 |
static void |
copyDirectory(Object src, Object dest)文件夹复制。 |
static void |
copyFile(Object srcFile, Object dest)文件复制。 |
static void |
createFileAlterationMonitor(String dir, Closure callback, org.apache.commons.io.filefilter.IOFileFilter filter = null, Long interval = 1000)创建文件变更监听器 |
static void |
createFileAlterationMonitor(java.io.File dir, Closure callback, org.apache.commons.io.filefilter.IOFileFilter filter = null, Long interval = 1000)创建文件变更监听器 |
static void |
createFileAlterationMonitor(String dir, org.apache.commons.io.monitor.FileAlterationListenerAdaptor listener, org.apache.commons.io.filefilter.IOFileFilter filter = null, Long interval = 1000)创建文件变更监听器 |
static String |
createSafeName(String name, String searchChars = null, String replaceChars = null)创建一个安全的文件名,不会导致由于操作系统不支持而无法写入文件。 |
static java.io.File |
createZipFile(List<Map> files, String zipFilePath) |
static Object |
deserializeObject(java.io.File file)将文件反序列化,并返回对象 |
static void |
eachBytes(java.io.File file, byte[] splitter, Closure callback, int bufferLen = * 4)使用分隔符,将文件分拆多个块处理。 |
static String |
encodeAsBase64(java.io.File file, boolean urlSafe = false)将文件内容转换成 Base64 编码的字符串 |
static String |
encodeAsBase64(java.io.InputStream is, boolean urlSafe = false)将输入流转换成 Base64 编码的字符串 |
static void |
encodeAsBase64(java.io.InputStream is, java.io.OutputStream os, boolean urlSafe = false)将输入流转换成 Base64 编码的字符串并写入输出流 |
static String |
fileIcon(String name)计算常见的文件类型图标名 |
static String |
fileMimeType(String filename)计算文件的MIME类型 |
static Collection<java.io.File> |
findFiles(java.io.File dir, String patternRegex, boolean childDir = true)根据文件名的正则表达式搜索文件 |
static Collection<java.io.File> |
findSuffixFiles(java.io.File dir, String suffix, boolean childDir = true)根据文件名前缀搜索文件 |
static java.io.InputStream |
getAssetStream(String src)获得 assets 下的资源文件 |
static String |
getExtension(String filename)计算文件扩展名 |
static org.grails.io.support.Resource |
getResource(String path)从 classpath 中获得资源对象(如 properties 文件),包括 jar 包中的文件 |
static org.grails.io.support.Resource |
getResourceRelativeToClass(Class clazz, String path)从 classpath 中、相对于 clazz 的位置,获得资源对象 |
static org.grails.io.support.Resource |
getResourceRelativeToPlugin(String pluginName, String path)从 classpath 中、相对于插件(build 文件夹或 jar 包)的位置,获得资源对象 |
static String |
getResourceText(String path, String encoding = "UTF-8")获得资源文件的文本内容 |
static String |
getResourceText(org.grails.io.support.Resource res, String encoding = "UTF-8")获得资源文件的文本内容 |
static String |
getResourceTextRelativeToJar(String jarPath, String path, String encoding = "UTF-8")获取 jar 包文件下的资源文件的文本内容 |
static String |
getResourceTextRelativeToPlugin(String pluginName, String path, String encoding = "UTF-8")获得插件下的资源文件的文本内容 |
static String |
getSizeString(Long fileSize)获得文件大小的表达式,数字+B/KB/MB/GB/TB |
static boolean |
isDirectoryEmpty(String dirPath)判断文件夹是否为空 |
static String |
md5(java.io.File file)计算文件的MD5 |
static boolean |
mklinkHard(Object src, Object dest)创建文件或文件夹的硬链接 |
static void |
moveDirectory(Object src, Object dest)文件夹移动。 |
static void |
moveFile(Object srcFile, Object dest)文件移动。 |
static org.apache.commons.vfs2.FileObject |
resolveFile(String name, org.apache.commons.vfs2.FileSystemOptions fileSystemOptions = null)基于 common-vfs,获得一个文件对象 |
static void |
saveFromBase64(java.io.File file, String str)将 Base64 编码的字符串转换成原始编码的文件 |
static void |
saveFromBase64(java.io.OutputStream os, java.io.InputStream is)将 Base64 编码的输入流转换成原始编码的输出流 |
static void |
serializeObject(Object obj, java.io.File file)将对象序列化并保存到文件系统中 |
static void |
unzip(String zipFilePath, String savePath)解压 zip 文件 |
static void |
unzip(java.io.InputStream inputStream, String savePath)解压 zip 文件流 |
static java.io.File |
zip(List<Map> files, String zipFilePath, Map options = null)创建 zip 文件 |
static void |
zip(List<Map> files, java.io.OutputStream os, Map options = null)创建 zip 文件,渲染到输出流(如下载) |
| Methods inherited from class | Name |
|---|---|
class Object |
Object#wait(long, int), Object#wait(long), Object#wait(), Object#equals(Object), Object#toString(), Object#hashCode(), Object#getClass(), Object#notify(), Object#notifyAll() |
合并多个文件
srcFiles - 要合并的原始文件(名)列表,如果文件不存在,会自动跳过该文件dest - 目标文件(名);如果文件已存在,会继续往文件尾部追加数据deleteSrc - 合并完成后,是否删除所有原始文件(注:如果删除失败不会有抛出任何异常)文件夹复制。如果目标文件夹存在,则会自动覆盖/合并目标文件夹。
注意:如果是要复制文件夹A到某个文件夹B内部,则参数dest应该为“B/A”。
src - 源文件夹对象或文件夹路径dest - 新的文件夹对象或文件夹路径文件复制。如果目标文件存在,则会自动覆盖目标文件。
srcFile - 源文件对象或文件路径dest - 目标文件(夹)对象或文件(夹)路径。 如果为文件夹路径,则需要在后面加上“/”或“\\”,避免由于文件夹不存在而复制出该名称的文件。
创建文件变更监听器
dir - 要监控文件夹的绝对路径callback - 可接收【新增或变更的文件对象】、【是否是创建文件】的回调闭包filter - 过滤器interval - 监听频率,默认1秒创建文件变更监听器
创建文件变更监听器
创建一个安全的文件名,不会导致由于操作系统不支持而无法写入文件。
如 Windows 不支持 “\/:*?"<>|” 等字符。
如果需要进行字符替换,请参考:
http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/StringUtils.html
name - 要处理的文件名searchChars - a set of characters to search for, may be nullreplaceChars - a set of characters to replace, may be null将文件反序列化,并返回对象
使用分隔符,将文件分拆多个块处理。
不同于 groovy 的 eachByte 方法,这里可以定义分隔符;不同于 eachLine 方法,这里处理的是 byte[] 而不是字符串,并且可以自定义分隔符。
file - 文件对象splitter - 分隔符,如 "\\n".getBytes() 相当于使用换行作为分隔符callback - 可以接收参数 int index, byte[] line 的闭包bufferLen - 缓存大小,默认 4k将文件内容转换成 Base64 编码的字符串
注意,如果文件比较大,不建议转成字符串,以免造成性能问题。
file - 要转换的文件对象将输入流转换成 Base64 编码的字符串
将输入流转换成 Base64 编码的字符串并写入输出流
计算常见的文件类型图标名
name - 文件名计算文件的MIME类型
参考:http://www.rgagnon.com/javadetails/java-0487.html
filename - 带扩展名的文件名,或者“.”加上扩展名,如“.doc”根据文件名的正则表达式搜索文件
其他用法参考 common-io 中的 FileUtils、FileFilterUtils。
例如 FileUtils.findFiles(dir, '^.+\\.doc.*$') 搜索所有以 docXXX 结尾的文件。
patternRegex - 文件名正则表达式,不区分大小写childDir - 是否包含子文件夹,默认为 true根据文件名前缀搜索文件
获得 assets 下的资源文件
src - 文件路径,如 portal/avatar.png计算文件扩展名
filename - 文件名,如 abc.jpg从 classpath 中获得资源对象(如 properties 文件),包括 jar 包中的文件
从 classpath 中、相对于 clazz 的位置,获得资源对象
例如:
有 a.jar、b.jar 两个包,分别有两个相同位置的文件 foo/bar.txt;
a.jar 里有类 /a/Foo.class、b.jar 里有类 /b/Bar.class;
那么 getResourceRelativeToClass (a.Foo.class , "/foo/bar.txt") 将返回 a.jar 中的文件。
从 classpath 中、相对于插件(build 文件夹或 jar 包)的位置,获得资源对象
获得资源文件的文本内容
获得资源文件的文本内容
获取 jar 包文件下的资源文件的文本内容
获得插件下的资源文件的文本内容
获得文件大小的表达式,数字+B/KB/MB/GB/TB
判断文件夹是否为空
dirPath - 文件夹路径计算文件的MD5
创建文件或文件夹的硬链接
限制:不能跨分区;不支持文件夹;不支持网络驱动器。
src - 源文件对象或文件路径dest -
目标文件(夹)对象或文件(夹)路径。
如果为文件夹路径,则需要在后面加上“/”或“\\”,避免由于文件夹不存在而复制出该名称的文件。
文件夹移动。如果目标文件夹存在,则会自动覆盖/合并目标文件夹。
注意:如果是要移动文件夹A到某个文件夹B内部,则参数dest应该为“B/A”。
src - 源文件夹对象或文件夹路径dest - 新的文件夹对象或文件夹路径文件移动。如果目标文件存在,则会自动覆盖目标文件。
srcFile - 源文件对象或文件路径dest -
目标文件(夹)对象或文件(夹)路径。
如果为文件夹路径,则需要在后面加上“/”或“\\”,避免由于文件夹不存在而复制出该名称的文件。
基于 common-vfs,获得一个文件对象
本方法只是获得文件对象的基本示例,详细的可以参考 common-vfs 的文档。
name - 文件名,可以是本地文件,或者 ftp、http、sftp、webdav、email、压缩包... 等文件。将 Base64 编码的字符串转换成原始编码的文件
file - 要保存的文件str - 编码字符串将 Base64 编码的输入流转换成原始编码的输出流
将对象序列化并保存到文件系统中
注意对象必须实现 Serializable 接口,否则会抛出 NotSerializableException 异常
解压 zip 文件
zipFilePath - 需要解压的 zip 文件savePath - 解压缩后的文件夹路径 比如:"/tmp/test001"解压 zip 文件流
创建 zip 文件
示例:// 创建一个压缩文件 z.zip,包含文件夹 /dev/shm/ramdisk/temp
FileUtils.zip([[file: new File("/dev/shm/ramdisk/temp")]], "/dev/shm/ramdisk/z.zip")
// 创建一个压缩文件 z.zip,包含当前文件夹下的文件 a.txt、b.doc
FileUtils.zip([[file: new File("a.txt")], [file: new File("b.doc")]], "/dev/shm/ramdisk/z.zip")
// 创建一个压缩文件 z.zip,包含当前文件夹下的文件 a.txt,并将文件放到 zip 内部文件夹 foobar 内
FileUtils.zip([[file: new File("a.txt"), filename: "foobar/a.txt"]], "/dev/shm/ramdisk/z.zip")
// 创建一个压缩文件 z.zip,包含上传的附件
MultipartFile mf = (MultipartFile) params.file
FileUtils.zip([[filename: mf.getOriginalFilename(), inputStream: mf.getInputStream()]], "/dev/shm/ramdisk/z.zip")
files - 需要压缩的文件(夹),可以为包含 file 对象(文件或文件夹)或仅表示文件的 filename、inputStream 键值对的 Map。zipFilePath - 压缩后的zip文件路径,如 "D:/test/test.zip",如果文件已存在,会自动覆盖或删除(压缩出错的情况下)options.level - 值为 1 ~ 9 的压缩级别,1 为最快速度、9 为最大压缩(文件最小、速度最慢)。options.method - 值为 0 或 8(默认),分别表示仅存储、或压缩。options.comment - 压缩文件文件注释创建 zip 文件,渲染到输出流(如下载)
示例:// 压缩文件夹 temp,并直接渲染下载为 abc.zip 文件
ServletUtils.renderDownload(request, response, { OutputStream os ->
FileUtils.zip([[file: new File("/dev/shm/ramdisk/temp")]], os)
}, "abc.zip")
os - 输出流;输出后会自动关闭流。