这份应该是我目前认为最好的一份对文件操作汇总的工具类了,毕竟是我花了很多精力开车才开出来的一份清晰整洁的工具类,下面就让我故车重开带你们遨游这1000+ lines,献上方法列表、代码及单元测试。
getFileByPath : 根据文件路径获取文件
isFileExists : 判断文件是否存在
isDir : 判断是否是目录
isFile : 判断是否是文件
createOrExistsDir : 判断目录是否存在,不存在则判断是否创建成功
createOrExistsFile : 判断文件是否存在,不存在则判断是否创建成功
createFileByDeleteOldFile : 判断文件是否存在,存在则在创建之前删除
copyDir : 复制目录
copyFile : 复制文件
moveDir : 移动目录
moveFile : 移动文件
deleteDir : 删除目录
deleteFile : 删除文件
listFilesInDir : 获取目录下所有文件
listFilesInDir : 获取目录下所有文件包括子目录
listFilesInDirWithFilter : 获取目录下所有后缀名为suffix的文件
listFilesInDirWithFilter : 获取目录下所有后缀名为suffix的文件包括子目录
listFilesInDirWithFilter : 获取目录下所有符合filter的文件
listFilesInDirWithFilter : 获取目录下所有符合filter的文件包括子目录
searchFileInDir : 获取目录下指定文件名的文件包括子目录
writeFileFromIS : 将输入流写入文件
writeFileFromString : 将字符串写入文件
getFileCharsetSimple : 简单获取文件编码格式
getFileLines : 获取文件行数
readFile2List : 指定编码按行读取文件到List
readFile2SB : 指定编码按行读取文件到StringBuilder中
getFileSize : 获取文件大小
getFileMD5 : 获取文件的MD5校验码
getDirName : 根据全路径获取最长目录
getFileName : 根据全路径获取文件名
getFileNameNoExtension : 根据全路径获取文件名不带拓展名
getFileExtension : 根据全路径获取文件拓展名
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static com.blankj.utilcode.utils.ConstUtils.*;
/**
*
* author: Blankj
* blog : http://blankj.com
* time : 2016/8/11
* desc : 文件相关工具类
*
*/
public class FileUtils {
private FileUtils() {
throw new UnsupportedOperationException("u can't instantiate me...");
}
/**
* 根据文件路径获取文件
*
* @param filePath 文件路径
* @return 文件
*/
public static File getFileByPath(String filePath) {
return StringUtils.isSpace(filePath) ? null : new File(filePath);
}
/**
* 判断文件是否存在
*
* @param filePath 文件路径
* @return {@code true}: 存在
{@code false}: 不存在
*/
public static boolean isFileExists(String filePath) {
return isFileExists(getFileByPath(filePath));
}
/**
* 判断文件是否存在
*
* @param file 文件
* @return {@code true}: 存在
{@code false}: 不存在
*/
public static boolean isFileExists(File file) {
return file != null && file.exists();
}
/**
* 判断是否是目录
*
* @param dirPath 目录路径
* @return {@code true}: 是
{@code false}: 否
*/
public static boolean isDir(String dirPath) {
return isDir(getFileByPath(dirPath));
}
/**
* 判断是否是目录
*
* @param file 文件
* @return {@code true}: 是
{@code false}: 否
*/
public static boolean isDir(File file) {
return isFileExists(file) && file.isDirectory();
}
/**
* 判断是否是文件
*
* @param filePath 文件路径
* @return {@code true}: 是
{@code false}: 否
*/
public static boolean isFile(String filePath) {
return isFile(getFileByPath(filePath));
}
/**
* 判断是否是文件
*
* @param file 文件
* @return {@code true}: 是
{@code false}: 否
*/
public static boolean isFile(File file) {
return isFileExists(file) && file.isFile();
}
/**
* 判断目录是否存在,不存在则判断是否创建成功
*
* @param dirPath 文件路径
* @return {@code true}: 存在或创建成功
{@code false}: 不存在或创建失败
*/
public static boolean createOrExistsDir(String dirPath) {
return createOrExistsDir(getFileByPath(dirPath));
}
/**
* 判断目录是否存在,不存在则判断是否创建成功
*
* @param file 文件
* @return {@code true}: 存在或创建成功
{@code false}: 不存在或创建失败
*/
public static boolean createOrExistsDir(File file) {
// 如果存在,是目录则返回true,是文件则返回false,不存在则返回是否创建成功
return file != null && (file.exists() ? file.isDirectory() : file.mkdirs());
}
/**
* 判断文件是否存在,不存在则判断是否创建成功
*
* @param filePath 文件路径
* @return {@code true}: 存在或创建成功
{@code false}: 不存在或创建失败
*/
public static boolean createOrExistsFile(String filePath) {
return createOrExistsFile(getFileByPath(filePath));
}
/**
* 判断文件是否存在,不存在则判断是否创建成功
*
* @param file 文件
* @return {@code true}: 存在或创建成功
{@code false}: 不存在或创建失败
*/
public static boolean createOrExistsFile(File file) {
if (file == null) return false;
// 如果存在,是文件则返回true,是目录则返回false
if (file.exists()) return file.isFile();
if (!createOrExistsDir(file.getParentFile())) return false;
try {
return file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* 判断文件是否存在,存在则在创建之前删除
*
* @param filePath 文件路径
* @return {@code true}: 创建成功
{@code false}: 创建失败
*/
public static boolean createFileByDeleteOldFile(String filePath) {
return createFileByDeleteOldFile(getFileByPath(filePath));
}
/**
* 判断文件是否存在,存在则在创建之前删除
*
* @param file 文件
* @return {@code true}: 创建成功
{@code false}: 创建失败
*/
public static boolean createFileByDeleteOldFile(File file) {
if (file == null) return false;
// 文件存在并且删除失败返回false
if (file.exists() && file.isFile() && !file.delete()) return false;
// 创建目录失败返回false
if (!createOrExistsDir(file.getParentFile())) return false;
try {
return file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* 复制或移动目录
*
* @param srcDirPath 源目录路径
* @param destDirPath 目标目录路径
* @param isMove 是否移动
* @return {@code true}: 复制或移动成功
{@code false}: 复制或移动失败
*/
private static boolean copyOrMoveDir(String srcDirPath, String destDirPath, boolean isMove) {
return copyOrMoveDir(getFil