2021SC@SDUSC
项目设置了KKFileUtils工具类来对文件进行管理,该类提供了处理类时的基本操作,避免了代码的冗余
1、isHttpUrl(URL url)方法:判断是否为url资源
判断的方法很简单,即是否以http开头还是以file开头
url.getProtocol().toLowerCase().startsWith("file") || url.getProtocol().toLowerCase().startsWith("http")
2、isFtpUrl(URL url)方法:判断是否为ftp资源
方法为判断url的名称是否包含ftp
"ftp".equalsIgnoreCase(url.getProtocol())
3、deleteFileByName(String fileName):根据文件名删除文件
首先判断文件是否存在,并且是否为一个文件而不是一个目录,如果存在并且是单个文件则可以直接删除,否则删除失败
File file = new File(fileName);
// 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
if (file.exists() && file.isFile()) {
if (file.delete()) {
LOGGER.info("删除单个文件" + fileName + "成功!");
return true;
} else {
LOGGER.info("删除单个文件" + fileName + "失败!");
return false;
}
} else {
LOGGER.info("删除单个文件失败:" + fileName + "不存在!");
return false;
}
4、getFileEncode(File file):检测文件编码格式
用到引入的工具类CharsetPrinter判断文件编码格式
public static String getFileEncode(File file) {
CharsetPrinter cp = new CharsetPrinter();
try {
String encoding = cp.guessEncoding(file);
LOGGER.info("检测到文件【{}】编码: {}", file.getAbsolutePath(), encoding);
return encoding;
} catch (IOException e) {
LOGGER.warn("文件编码获取失败,采用默认的编码格式:UTF-8", e);
return DEFAULT_FILE_ENCODING;
}
}
5、suffixFromFileName(String fileName):得到文件后缀
fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
6、deleteFileByPath(String filePath):根据文件绝对路径删除文件
方法跟上面类似,同样是先判断是否存在
File file = new File(filePath);
if (file.exists() && !file.delete()) {
LOGGER.warn("压缩包源文件删除失败:{}!", filePath);
}
7、 deleteDirectory(String dir):删除目录及目录下的文件
dir————要删除的目录的文件路径
如果dir不以文件分隔符结尾,自动添加文件分隔符
if (!dir.endsWith(File.separator)) {
dir = dir + File.separator;
}
File dirFile = new File(dir);
如果dir对应的文件不存在,或者不是一个目录,则退出
if ((!dirFile.exists()) || (!dirFile.isDirectory())) {
LOGGER.info("删除目录失败:" + dir + "不存在!");
return false;
}
删除文件夹中的所有文件包括子目录,通过遍历,得到每一个子文件,然后判断该文件是文件还是目录,并调用上面以及构造好的方法进行删除。
for (int i = 0; i < Objects.requireNonNull(files).length; i++) {
// 删除子文件
if (files[i].isFile()) {
flag = KkFileUtils.deleteFileByName(files[i].getAbsolutePath());
if (!flag) {
break;
}
} else if (files[i].isDirectory()) {
// 删除子目录
flag = KkFileUtils.deleteDirectory(files[i].getAbsolutePath());
if (!flag) {
break;
}
}