概述
commons-io
是一款处理 IO 流的工具,封装了很多处理 IO 流和文件的方法,可以大大简化我们处理 IO 流和操作文件的代码。从 commons-io
的官方使用文档可以看出,它主要分为工具类、尾端类、行迭代器、文件过滤器、文件比较器和扩展流。
官网地址:http://commons.apache.org/proper/commons-io/
下载:http://commons.apache.org/proper/commons-io/download_io.cgi
工具类
org.apache.commons.io
包下包含了 FileUtils
、IOUtils
、FilenameUtils
和 FileSystemUtils
等,前三者的方法并没有多大的区别,只是操作的对象不同,故名思议:FileUtils
主要操作 File 类,IOUtils
主要操作 IO 流,FilenameUtils
则是操作文件名,FileSystemUtils
包含了一些 JDK 没有提供的用于访问文件系统的实用方法。下面我们就来总结下这些工具类的具体用法。
maven
依赖
1 | <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> |
FileUtils
常用常量
1 | public static final long ONE_KB = 1024; |
FileUtils
常用方法
getFile
、getTempDirectory
、getUserDirectory
、byteCountToDisplaySize
、sizeOf
、sizeOfDirectory
getFile(String... names)
:获取指定文件。getFile(File directory, String... names)
:获取指定目录下的指定文件。getTempDirectory()
:获取系统临时目录 File 对象。getTempDirectoryPath()
:获取系统临时目录路径。getUserDirectory()
:获取用户主目录 File 对象。getUserDirectoryPath()
:获取用户主目录路径。byteCountToDisplaySize(long size)
:以可读的方式,返回文件的大小 EB、PB、TB、GB、MB、KB or bytes。byteCountToDisplaySize(BigInteger size)
:以可读的方式,返回文件的大小 EB、PB、TB、GB、MB、KB or bytes。sizeOf(File file)
:读取文件大小,返回 long。sizeOfAsBigInteger(File file)
:读取文件大小,返回 BigInteger。sizeOfDirectory(File directory)
:目录,级联计算文件下的所有文件大小,返回 long。sizeOfDirectoryAsBigInteger(File directory)
:目录,级联计算文件下的所有文件大小,返回 BigInteger。toFile(URL url)
:根据 URL 获取文件(new URL(“file://Users/vincent/IDEA_Project/my_project/IO/touch”))。toFiles(URL... urls)
:根据多个 URL 获取多个文件文件,返回 File[] 数组。toURLs(File... files)
:文件地址转为 URL。copyInputStreamToFile(InputStream source, File destination)
:将输入流的内容复制到新文件。directoryContains(File directory, File child)
:判断父目录是否包含子目录或者子文件。listFiles(File directory, String[] extensions, boolean recursive)
:根据 extensions 拓展规则,搜索文件;recursive 是否递归,返回文件迭代器。listFiles(File directory, String[] extensions, boolean recursive)
:根据 extensions 拓展规则,搜索文件;recursive 是否递归,返回文件集合。listFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)
:根据 FileFileFilter 自定义文件过滤器,和 DirectoryFileFilter 自定义目录过滤器,搜索文件和目录,返回文件和目录集合。
例:
1 |
|
touch
和 forceMkdir
touch(File file)
:创建文件,如果文件存在则更新时间;如果不存在,创建一个空文件。
forceMkdir(File directory)
:强制创建文件目录,如果文件目录存在,会抛出异常。
1 | touch(File file) |
例:
1 |
|
copyFile
copyFile(File srcFile, File destFile)
:此方法将目录 A 下的 abc.txt 拷贝到目录 B 下的 abc.txt;如果有同名文件则替换,没有则新建。
1 | copyFile(File srcFile, File destFile) |
例:
1 |
|
copyFileToDirectory
copyFileToDirectory(File srcFile, File destDir)
:此方法将目录 A 下的 abc.txt 拷贝到指定目录下,如果有同名文件则替换,没有则新建。
1 | copyFileToDirectory(File srcFile, File destDir) |
例:
1 |
|
copyDirectory
copyDirectory(File srcDir, File destDir)
:文件目录复制。
1 | copyDirectory(File srcDir, File destDir) |
例:
1 |
|
copyDirectoryToDirectory
copyDirectoryToDirectory(File sourceDir, File destinationDir)
:此方法将目录 A 下的所有的文件夹及文件(包含目录 A),复制到目录 B 下;如果有同名目录则合并,如果有同名文件则替换。
1 | copyDirectoryToDirectory(File sourceDir, File destinationDir) |
例:
1 |
|
moveDirectory
moveDirectory(File srcDir, File destDir)
:移动目录(复制并删除),目标目录与原目录中如果存在同名目录会报错(相当与重命名)。
moveDirectoryToDirectory(File src, File destDir, boolean createDestDir)
:移动目录到目标目录下;createDestDir 目录不存在是否创建。
moveFile(File srcFile, File destFile)
:移动文件(复制并删除),目标目录下存在文件则报错(也可重命名)。
moveFileToDirectory(File srcFile, File destDir, boolean createDestDir)
:移动文件到目标目录下;createDestDir 目录不存在是否创建。
1 | moveDirectory(File srcDir, File destDir) |
例:
1 |
|
openInputStream
和 openOutputStream
openInputStream(File file)
和 openOutputStream(File file)
:获取文件输入输出流。
1 | openInputStream(File file) |
例:
1 |
|
deleteDirectory
、deleteQuietly
、cleanDirectory
、forceDelete
、forceDeleteOnExit
deleteDirectory(File directory)
:删除目录或文件,无法删除会抛异常。
deleteQuietly(File file)
:安静删除目录或文件,无法删除时也不会抛异常。
cleanDirectory(File directory)
:删除该目录下的所有内容(保留该目录)。
forceDelete(File file)
:强制删除目录或文件。
forceDeleteOnExit(File file)
:当 JVM 退出时,删除目录或文件。
1 | deleteDirectory(File directory) |
例:
1 |
|
readXxx
readFileToByteArray(File file)
:读取目标文件,返回文件内容的 bytes 数组。
readFileToString(File file)
:读取目标文件,返回文件内容字符串。
readLines(File file)
:读取目标文件每一行数据,返回 list。
lineIterator(File file)
:读取目标文件每一行数据,返回迭代器。
1 | readFileToByteArray(File file) |
例:
1 |
|
writeXxx
write(File file, CharSequence data, Charset charset, boolean append)
:将字符串写入目标文件,并设置字符集;append 是否追加(true:追加,false:覆盖)。
writeByteArrayToFile(File file, byte[] data, boolean append)
:将文件内容以 bytes 数组写入文件;append 是否追加(true:追加,false:覆盖)。
writeLines(File file, String charsetName, Collection<?> lines, String lineEnding, boolean append)
:将集合中的数据逐行写入文件中,并设置字符集,并设置行与行直接的分隔符;append 是否追加(true:追加,false:覆盖)。
writeStringToFile(File file, String data, Charset charset, boolean append)
:将字符串写入文件,并设置字符集;append 是否追加(true:追加,false:覆盖)。
1 | write(File file, CharSequence data) |
例:
1 |
|
isFileNewer
和 isFileOlder
isFileNewer(File file, Date date)
:比较指定的文件是否比指定的日期新。
isFileNewer(File file, File reference)
:比较前一个文件是否比后一个文件新。
isFileNewer(File file, Instant instant)
:比较指定的文件是否比指定的瞬间更新。
isFileNewer(File file, long timeMillis)
:比较指定的文件是否比指定的时间引用新。
isFileOlder(File file, Date date)
:比较指定的文件是否比指定的日期旧。
isFileOlder(File file, File reference)
:比较前一个文件是否比后一个文件旧。
isFileOlder(File file, Instant instant)
:比较指定的文件是否比指定的瞬间更旧。
isFileOlder(File file, long timeMillis)
:比较指定的文件是否比指定的时间引用旧。
1 | isFileNewer(File file, Date date) |
例:
1 |
|
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !