`

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();
			}
		}
	}

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics