`

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

 

 

 

分享到:
评论

相关推荐

    使用c语言递归删除指定文件夹下所有的文件(包含文件以及文件夹)

    本代码使用c语言,可执行递归删除指定文件夹下所有的文件(包含文件以及文件夹)的操作,注释详细,易于使用或修改

    递归删除指定文件夹下的指定文件夹及文件

    递归删除指定文件夹下的指定文件夹及文件,如删除文件夹中的所有.svn的文件夹及文件

    java删除某个文件夹

    java递归删除整个文件夹,可以文件夹中所有的文件和子文件夹

    java递归删除文件和文件夹.pdf

    Java 递归删除文件和文件夹是 Java 编程中一个常见的操作。该操作需要使用 Java 的 File 类来实现,通过递归调用来删除文件和文件夹。 File 类 在 Java 中,File 类是用于表示文件和文件夹的类。该类提供了许多...

    java递归实现删除文件夹

    以下是对Java中递归实现删除文件夹这一知识点的详细解释。 1. **基本概念** - **递归**:一个函数在其定义中调用自身的过程,每次调用都处理问题的一个更小的部分,直到达到基本情况,此时不再进行递归调用。 - *...

    java 递归读取文件夹 读取文件 写文件

    java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取...

    java创建和删除文件夹、文件

    需要注意的是,对于删除文件夹的操作,如果文件夹非空,则需要先递归删除其中的所有文件和子文件夹后才能删除该文件夹。此外,在处理文件系统相关的操作时,建议捕获并妥善处理可能出现的各种异常情况,确保程序的...

    递归删除指定文件夹下所有空文件夹

    使用方法:双击软件弹出文件夹拾取框执行程序

    QT递归删除文件夹,而不删除自己文件夹

    当递归删除文件夹时,会把自己文件夹也删除掉,比如要删除E:/testTemp/qftp 这个文件夹下多有文件,但会把qftp这个文件夹删除,本程序改进后将不删除qftp文件夹,但qftp文件夹下的所有文件都会删除

    删除空文件夹的小工具

    在这个工具中,日志文件可能记录了删除的空文件夹路径、操作时间以及可能出现的任何错误或异常,帮助用户了解工具的运行情况和可能出现的问题。 总的来说,这款“删除空文件夹的小工具”利用C#的多线程技术,高效地...

    递归删除指定类型的文件夹,递归删除指定类型的文件

    在IT领域,递归删除是一种常见且强大的操作,主要用于清理特定类型或结构的文件和文件夹。本主题主要探讨如何实现“递归删除指定类型的文件夹”和“递归删除指定类型的文件”,以及如何在文件夹内部进行深度搜索和...

    java删除空文件夹

    java编写,递归删除某一指定目录下所有文件夹,空文件夹下空文件夹

    java删除指定文件夹下文件

    在JDK 7及以上版本中,Java提供了一种更加高效且灵活的方式来删除文件,包括递归删除整个文件夹及其子文件,这主要通过`java.nio.file`包中的`Files`类和`SimpleFileVisitor`类来实现。下面我们将详细探讨如何实现这...

    删除文件夹和文件夹里面的文件

    使用递归删除文件

    java递归与非递归实现扫描文件夹下所有文件

    在Java中,可以使用File类来表示文件和文件夹,然后使用递归函数来实现文件夹下所有文件的扫描。 在上面的代码中,我们定义了一个FolderFileScanner类,该类中有两个静态方法:scanFilesWithRecursion和...

    递归删除,复制文件夹

    在给定的压缩包文件`RecursiveBrowseFolder`中,可能包含一个示例程序或代码库,演示如何实现上述的递归删除和复制文件夹功能。这个程序可能提供一个接口或函数,用户可以通过指定源文件夹和目标文件夹来执行递归...

    JAVA程序递归方式搜索Windows文件夹源代码

    在Java编程中,递归是一种强大的技术,常用于解决复杂问题,例如遍历或搜索文件系统中的文件夹。本文将详细解析如何使用Java编写一个递归程序来搜索Windows文件夹,以及涉及到的相关知识点。 首先,我们需要理解...

    C#删除FTP文件夹(有子文件夹和子文件)的方法

    为了实现递归删除,我们需要先获取文件夹下的所有子文件夹和文件,然后再逐一删除。这里需要用到自定义的`FtpDirInfo`类来帮助获取这些信息: ```csharp private string[] GetDeleteFolderArray(string path) { ...

    java创建和删除文件夹、文件.doc

    ### Java创建和删除...此外,对于文件夹的删除操作,还需要注意递归删除内部的所有文件和文件夹,确保不会遗漏任何内容。 这些基础知识对于任何Java开发者来说都是非常重要的,特别是在处理文件系统相关的任务时。

    vs2017 下 windows C/C++ 删除文件夹以及文件夹里的所有文件,遍历嵌套删除文件及文件夹

    为了实现递归删除文件夹及其内容,我们需要在枚举到的每个文件或子文件夹上执行以下操作: - 如果是文件,使用`DeleteFile`函数删除。 - 如果是子文件夹,调用自身,递归删除子文件夹。 以下是一个简单的示例,...

Global site tag (gtag.js) - Google Analytics