`

java中文件操作(递归删除空文件夹,删除过期文件)

阅读更多

对文件的操作,大家都可能会写一些操作,其实Apache中FileUtils已经做了很好的封装,今天将常用的操作记录如下:

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

 

/**
	 * 清理目录中过期的文件
	 * 
	 * @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;
	}

 2、清理所有的文件夹

/**
	 * 循环删除空的文件夹
	 * 
	 * @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();
			}
		}
	}

 

 

 

分享到:
评论

相关推荐

    批处理实现自动删除过期文件的定期操作

    批处理实现自动删除过期文件的定期操作 ...在本文中,我们介绍了如何使用 FORFILES 命令和批处理实现自动删除过期文件的定期操作。这可以帮助我们自动删除过期的日志文件,释放服务器的存储空间和提高系统的运行效率。

    Java定时清理过期文件的实例代码

    Java递归删除文件是指使用递归算法来删除文件夹下所有文件的方法。在上面的代码中,我们使用了递归算法来删除文件夹下所有文件。该方法将检查文件夹下所有文件,如果是文件夹,则递归调用该方法来删除文件夹下的所有...

    遍历文件夹下的文件夹

    这个过程通常涉及递归地访问一个目录及其所有子目录,查找、读取或者操作其中的文件和子文件夹。在本文中,我们将深入探讨如何在不同的编程语言中遍历文件夹下的文件夹,以及这一操作的重要性。 首先,让我们了解...

    springboot开发在线网盘管理系统【完整sql+参考源码】

    文件移动、复制、下载、删除、分享,分享分为私密分享和公开分享,还可以设置分享过期时间 打开分享链接后可以对文件进行查看、下载、保存到自己网盘等 超级管理员登录后可以设置普通用户的空间大小、角色类型、权限...

    基于springboot开发在线网盘管理系统【源码+sql】

    使用技术: ...后台使用技术:Springboot、Spring、SpringMvc、SpringData等 数据库:Mysql数据库 项目功能介绍: ...3:网盘目录结构可无限制层级创建,保存移动复制文件时递归所选文件夹层级等等。

    使用FileVisitor接口遍历目录树,删除文件

    在Java中,`FileVisitor`接口提供了一种优雅的方式来遍历和操作文件系统目录树。在上述场景中,为了高效地删除大量过期文件,使用`FileVisitor`接口比传统的递归方法更具优势,尽管可能会消耗更多的内存。下面将详细...

    Android实现WebView删除缓存的方法

    这段代码会删除WebView使用的两个数据库文件`webview.db`和`webviewCache.db`,以及缓存文件夹中的所有文件。`CacheManager.getCacheFileBaseDir()`通常返回WebView的缓存目录,但实际使用时需根据具体项目配置来...

    2021-2022计算机二级等级考试试题及答案No.13207.docx

    删除关系时,通常需要在“关系”窗口中进行操作。 ### 24. FTP 协议的用途 - **FTP的功能**:FTP (File Transfer Protocol) 是用于在 Internet 上进行文件传输的标准协议。它支持上传和下载文件,以及在远程计算机...

Global site tag (gtag.js) - Google Analytics