1. 概述
本篇文章主要介绍Java开发常用的工具类,所谓工欲善其事必先利其器,有了好的工具无论是工作还是学习都会游刃有余。
2. 常用方法
顾名思义,apache的FileUtils主要是对文件进行操作,包括:删除、复制、创建、读出、写入等。
Maven仓库地址:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
2.1 文件写入
// 指定编码,将字符串内容写入到文件中
public static void writeStringToFile(File file, String data, String charsetName);
// 指定编码,将字符串内容写入到文件中,是否覆盖文件内容
public static void writeStringToFile(File file, String data, String charsetName, boolean append);
// 将输入流存为文件
public static void copyInputStreamToFile(InputStream source, File destination);
public static void copyToFile(InputStream source, File destination);
// 将data写入到文件中,如果文件不存在则创建
public static void write(File file, CharSequence data, Charset charset);
// 将data写入到文件中,如果文件不存在则创建,是否追加内容
public static void write(File file, CharSequence data, Charset charset, boolean append);
// 将data写入到文件中,如果文件不存在则创建
public static void write(File file, CharSequence data, String charsetName);
// 将data写入到文件中,如果文件不存在则创建,是否追加内容
public static void write(File file, CharSequence data, String charsetName, boolean append);
// 将字节数组写入到文件中
public static void writeByteArrayToFile(File file, byte[] data);
// 将字节数组写入到文件中,是否追加
public static void writeByteArrayToFile(File file, byte[] data, boolean append);
// 将指定字节数组从off开始的len字节写入到文件中
public static void writeByteArrayToFile(File file, byte[] data, int off, int len);
// 将指定字节数组从off开始的len字节写入到文件中,是否追加
public static void writeByteArrayToFile(File file, byte[] data, int off, int len, boolean append);
// 将集合中的内容写入到文件中
public static void writeLines(File file, Collection<?> lines);
// 将集合中的内容写入到文件中,是否追加
public static void writeLines(File file, Collection<?> lines, boolean append);
// 将集合中的内容写入到文件中,指定行尾
public static void writeLines(File file, Collection<?> lines, String lineEnding);
// 将集合中的内容写入到文件中,指定行尾,是否追加
public static void writeLines(File file, Collection<?> lines, String lineEnding, boolean append);
2.2 文件读取
// 将文件内容以字符串形式读出
public static String readFileToString(File file);
public static String readFileToString(File file, String charsetName);
public static String readFileToString(File file, Charset charsetName);
// 逐行读取文件内容到字符串集合
public static List<String> readLines(File file);
public static List<String> readLines(File file, String charsetName);
public static List<String> readLines(File file, Charset charsetName);
// 读取文件内容,返回行迭代器
public static LineIterator lineIterator(File file);
public static LineIterator lineIterator(File file, String charsetName);
// 读取文件为字节数组
public static byte[] readFileToByteArray(File file);
2.3 复制文件/目录
// 将整个目录(包括目录下的文件夹和文件)复制到目标目录中
public static void copyDirectoryToDirectory(File sourceDir, File destinationDir);
// 复制目录,当文件夹下有重名文件时不覆盖
public static void copyDirectory(File srcDir, File destDir);
// 是否将源目录的最后修改时间赋值给目标目录的最后修改时间,默认不修改
public static void copyDirectory(File srcDir, File destDir, boolean preserveFileDate);
// 根据过滤条件选择需要合并的文件
public static void copyDirectory(File srcDir, File destDir, FileFilter filter);
// 合并文件夹时选择的操作
public static void copyDirectory(File srcDir, File destDir, FileFilter filter, boolean preserveFileDate, CopyOption... copyOptions);
--------------------------------------------------------------------
// 复制文件
public static void copyFile(File srcFile, File destFile);
// 复制文件,是否将原文件修改时间赋值给新文件
public static void copyFile(File srcFile, File destFile, boolean preserveFileDate);
// 使用复制选项复制文件
public static void copyFile(File srcFile, File destFile, boolean preserveFileDate, CopyOption... copyOptions);
// 复制文件到输出流,前提是目标路径和目标文件已经存在
public static long copyFile(File input, OutputStream output);
--------------------------------------------------------------------
// 复制文件到指定目录
public static void copyFileToDirectory(File srcFile, File destDir);
// 复制文件到指定目录,是否将原文件修改时间赋值给新文件
public static void copyFileToDirectory(File srcFile, File destDir, boolean preserveFileDate);
// 复制文件或目录到指定目录
public static void copyToDirectory(File sourceFile, File destinationDir);
// 复制文件集合到目标目录中
public static void copyToDirectory(Iterable<File> sourceIterable, File destinationDir);
2.4 删除文件/目录
// 清空目录下的文件和文件夹而不删除目录
public static void cleanDirectory(File directory);
// 递归删除目录,包括目录下的文件和文件夹
public static void deleteDirectory(File directory);
// 删除一个文件或目录,不会抛出异常
public static void deleteQuietly(File file);
// 删除一个文件或文件夹,会抛出异常
public static void forceDelete(File file);
// 删除文件,删除失败时有返回
public static boolean delete(File file);
// 先把删除命令缓存,JVM终止时真正删除文件
public static void forceDeleteOnExit();
2.5 创建目录
// 常规,创建目录
public static boolean mkdir();
// 创建目录,如果路径目录不存在时会一起创建
public static boolean mkdirs();
// 创建目录,不返回结果,如果路径目录不存在时会一起创建
public static void forceMkdir(File directory);
// 创建目录或文件的父目录,不返回结果,如果路径目录不存在时会一起创建
public static void forceMkdirParent(File file);
2.6 获取目录中的文件或目录
// 允许对给定目录(及其子目录)中的文件进行迭代
public static Iterator<File> iterateFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter);
// 允许对给定目录(及其子目录)中与扩展名数组匹配的文件进行迭代
public static Iterator<File> iterateFiles(File directory, String[] extensions, boolean recursive);
// 允许对给定目录(及其子目录)中的文件和目录进行迭代
public static Iterator<File> iterateFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter);
// 将目录中的文件子目录读取为集合
public static Collection<File> listFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter);
// 允许对给定目录(及其子目录)中与扩展名数组匹配的文件进行迭代
public static Collection<File> listFiles(File directory, String[] extensions, boolean recursive);
// 允许对给定目录(及其子目录)中的文件和目录进行迭代
public static Collection<File> listFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter);
2.7 移动
// 移动目录,当目标目录存在时会抛出FileExistsException
public static void moveDirectory(File srcDir, File destDir);
// 移动目录到目标目录,是否创建目标目录,当目标目录中存在要移动的目录时,抛出FileExistsException
public static void moveDirectoryToDirectory(File srcDir, File destDir, boolean createDestDir);
// 移动文件,当目标文件存在时FileExistsException
public static void moveFile(File srcFile, File destFile);
// 移动文件到目标目录,是否创建目标目录,如果文件存在于目标目录中,抛出FileExistsException
public static void moveFileToDirectory(File srcFile, File destDir, boolean createDestDir);
// 移动文件或目录到目标目录,是否创建目标目录,如果文件或目录存在于目标目录中,抛出FileExistsException
public static void moveToDirectory(File src, File destDir, boolean createDestDir);
2.8 计算大小
// 读取文件大小,如果是目录则递归计算大小
public static long sizeOf(File file);
public static BigInteger sizeOfAsBigInteger(File file);
// 递归计算目录大小
public static long sizeOfDirectory(File directory);
public static BigInteger sizeOfDirectoryAsBigInteger(File directory);
2.9 创建文件
// 与在linux系统执行命令touch相同的方法
public static void touch(File file);
2.10 将File集合转换成File数组
public static File[] convertFileCollectionToFileArray(Collection<File> files);
2.11 目录是否包含子元素
// 递归查找目录中是否包含某个子元素
public static boolean directoryContains(File directory, File child);
3. 常规方法
3.1 格式化字节
// 返回文件大小的可读版本,其中输入表示特定的字节数。
public static String byteCountToDisplaySize(BigInteger size);
public static String byteCountToDisplaySize(long size);
3.2 校验和
// 使用指定的校验和对象计算文件的校验和。
public static Checksum(File file, Checksum checksum);
public static long checksumCRC32(File file);
3.3 比较两个文件内容是否相同
public static boolean contentEquals(File file1, File file2);
public static boolean contentEquals(File file1, File file2, String charsetName);
3.4 获取用户目录
public static File getUserDirectory();
public static String getUserDirectoryPath();
3.5 打开文件流
public static FileInputStream openInputStream(File file);
public static FileOutputStream openOutputStream(File file);
public static FileOutputStream openOutputStream(File file, boolean append);
3.6 将URL读取为文件
public static File toFile(URL url);
public static File[] toFiles(URL... urls);
3.7 等待
// 检测文件创建,直到超时
public static boolean waitFor(File file, int seconds);