java 递归删除空_java中文件操做(递归删除空文件夹,删除过时文件)

对文件的操做,你们均可能会写一些操做,其实Apache中FileUtils已经作了很好的封装,今天将经常使用的操做记录以下:java

(1)保留规定的前几个月的记录以下:code

/**

* 清理目录中过时的文件

*

* @param dayCount

* :保存时间天数

* @param dirPath

* :目录路径

* @return

*/

@SuppressWarnings("unchecked")

private static boolean deleteFiles(String dirPath, String backupPath, int days, boolean isBackup) {

// 计算备份日期,备份该日期以前的文件

Date pointDate = new Date();

long timeInterval = pointDate.getTime() - convertDaysToMilliseconds(days);

pointDate.setTime(timeInterval);

// 是否进行备份

if (isBackup) {

if (!backUpFiles(dirPath, backupPath, pointDate)) {

System.out.println(" Backup failed: " + dirPath);

return false;

}

}

// 设置文件过滤条件

IOFileFilter timeFileFilter = FileFilterUtils.ageFileFilter(pointDate, true);

IOFileFilter fileFiles = FileFilterUtils.andFileFilter(FileFileFilter.FILE, timeFileFilter);

// 删除符合条件的文件

File deleteRootFolder = new File(dirPath);

Iterator itFile = FileUtils.iterateFiles(deleteRootFolder, fileFiles, TrueFileFilter.INSTANCE);

while (itFile.hasNext()) {

File file = (File) itFile.next();

boolean result = file.delete();

if (!result) {

LogEx.error("Failed to delete file of :" + file);

return false;

}

}

// 清理空的文件夹

File[] forderList = deleteRootFolder.listFiles();

if (forderList != null && forderList.length > 0) {

for (int i = 0; i < forderList.length; i++) {

deleteEmptyDir(forderList[i]);

}

}

return true;

}

/**

* 备份删除文件到指定的目录 ,目录格式:yyyy_MM_dd_bak

*

* @param srcDir

* :源文件路径

* @param destDir

* :目标文件路径

* @param dayCount

* :时间间隔,备份该时间以前的数据

* @return

*/

private static boolean backUpFiles(String srcDir, String destDir, Date pointDate) {

try {

// 设置备份文件夹格式YYYY_MM_dd_bak

SimpleDateFormat format = new SimpleDateFormat("yyyy_MM_dd");

String folderName = format.format(new Date()) + "_bak";

File resFile = new File(srcDir);

File distFile = new File(destDir + File.separator + folderName);

// 文件过滤条件

IOFileFilter timeFileFilter = FileFilterUtils.ageFileFilter(pointDate, true);

IOFileFilter fileFiles = FileFilterUtils.andFileFilter(FileFileFilter.FILE, timeFileFilter);

// 复制文件目录

FileFilter filter = FileFilterUtils.orFileFilter(DirectoryFileFilter.DIRECTORY, fileFiles);

FileUtils.copyDirectory(resFile, distFile, filter, true);

} catch (IOException e) {

e.printStackTrace();

LogEx.error("Failed to backupFile:" + e.getMessage());

return false;

}

return true;

}

/**

* 天与毫秒的转换

*

* @param days

* @return

*/

private static long convertDaysToMilliseconds(int days) {

return days * 24L * 3600 * 1000;

}

二、清理全部的文件夹orm

/**

* 循环删除空的文件夹

*

* @param dir

*/

private static void deleteEmptyDir(File dir) {

if (dir.isDirectory()) {

File[] fs = dir.listFiles();

if (fs != null && fs.length > 0) {

for (int i = 0; i < fs.length; i++) {

File tmpFile = fs[i];

if (tmpFile.isDirectory()) {

deleteEmptyDir(tmpFile);

}

if (tmpFile.isDirectory() && tmpFile.listFiles().length <= 0) {

tmpFile.delete();

}

}

}

if (dir.isDirectory() && dir.listFiles().length == 0) {

dir.delete();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值