`
oboaix
  • 浏览: 274304 次
社区版块
存档分类
最新评论

解决递归删除文件

    博客分类:
  • JAVA
阅读更多

 公司项目有删除SVN版本文件,注册一个Delete SVN Folder也不错,代码实现也是可行的,自己模拟实现此类删除。
 记录保留使用,有时也用的着,资源共享.....

 

/**
 *  试完成一个函数,它递归枚举给定的目录,并将所有的.bak文件删除。但是,所有名为.svn的目录将被跳过。
 */
import java.io.*;
import java.util.*;

/**
 * windows XP
 * @author zxb 
 * @date 2009-07-09
 * java version "1.4.2_09"
 */
public class RecurDelDirOrFile {

	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) {
		try {
			String path = "D:" + File.separator + "test"+File.separator+"aaaa.txt";// 传递的文件夹目录
			//findFiles(path);

			System.out.println("---------------文件夹集合--------------");
			for (int i = 0; i < list1.size(); i++) {
				System.out.println(list1.get(i));
			}
			System.out.println("---------------文件集合--------------");
			for (int i = 0; i < list2.size(); i++) {
				System.out.println(list2.get(i));
			}
			deleteFiles(path, false, false);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	// 文件夹和文件的迭代实现列举 过滤
	public static void findFiles(String path) throws Exception {
		if (path == null) {
			throw new Exception("文件(夹)是空的...");
		}
		File f = new File(path);
		File[] fs = null;

		if (f.isDirectory()) {
			fs = f.listFiles(new FileFilter() {
				public boolean accept(File pathname) {
					String fileName = pathname.getName().toLowerCase();
					if (fileName.substring(fileName.lastIndexOf(".") + 1)
							.equals("bak") || (pathname.isDirectory() && !fileName
									.equals(".svn")))
						return true;
					else
						return false;
				}
			});
			for (int i = 0; i < fs.length; i++) {
				if (fs[i].isDirectory()) {
					list1.add(fs[i].getPath());
					findFiles(fs[i].getPath());
				} else {
					list2.add(fs[i].getPath());
				}
			}
		}else{
			list2.add(f.getPath());
		}
	}

	/**
	 * 文件删除操作 c:\\test
	 * @param fileName    文件目录路径名
	 * @param deleteSelf  是否删除自身
	 * @param deleteDir   是否删除目录
	 * @return boolean
	 * @throws Exception
	 */
	public static boolean deleteFiles(String fileName, boolean deleteSelf,
			boolean deleteDir) throws Exception {
		if (fileName == null
				|| (fileName != null && fileName.trim().equals(""))) {
			throw new Exception("文件路径不正确");
		}
		File f = new File(fileName);
		if (!f.exists()) {
			System.out.println("该文件不存在");
			return true;
		} else {
			try {
				findFiles(fileName);
				System.out.println(list2.size());
				for (int i = 0; i < list2.size(); i++) {
					Thread.sleep(100);// 延迟删除
					synchronized(new Object()){
						new File(list2.get(i).toString()).delete();// 文件删除
						System.out.println(list2.get(i).toString() + "====删除成功!");
					}
				}
				Thread.sleep(list2.size()*500);//延迟删除
				for (int i = list1.size() - 1; i >= 0 && deleteDir; i--) {// 倒置删除,从深层次目录删除目录结构
					new File(list1.get(i).toString()).delete(); // 文件夹删除
				}
			} catch (Exception ex) {
				ex.printStackTrace();
				return false;
			}
		}
		if (deleteSelf) {
			f.delete();
		}
		return true;
	}

	static List list1 = new ArrayList();// 文件夹名集合

	static List list2 = new ArrayList();// 文件集合
}

 

分享到:
评论

相关推荐

    递归删除文件或子目录

    在这个场景中,"递归删除文件或子目录"指的是编写一个程序,它能够遍历并删除指定目录下的所有文件和子目录,包括它们的子孙目录,但会跳过那些被标记为只读属性的文件和目录。这个功能在清理或整理文件系统时非常...

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

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

    JAVA递归删除目录失败

    so easy,写了一个递归删除目录,但结果出乎意料,一个递归目录删除成功,而另外一个却删除失败,刚开始怀疑文件被占用问题,后来被排除了。后来尝试使用各种工具,文件粉碎机都不能解决。最后,通过重命名解决此...

    递归删除列表文件以外的所有文件源代码.rar

    在这个"递归删除列表文件以外的所有文件源代码"的例子中,我们可以看到是用Delphi语言实现的。 Delphi是一种基于Object Pascal的集成开发环境(IDE),它提供了强大的Windows应用程序开发能力。源码中可能包含以下...

    java递归实现删除文件夹

    - 递归删除可能涉及权限问题,确保程序有足够的权限来访问和删除文件和目录。 - 谨慎使用递归删除,因为它可能导致数据丢失,且在处理大量文件时可能会消耗大量内存。 - 在实际应用中,可能需要添加异常处理代码...

    (java递归)删除文件

    在本文中,我们将深入探讨如何使用递归方法在Java中删除文件,这通常涉及到目录及其包含的所有文件和子目录的删除。以下是根据提供的代码片段提炼出的关键知识点: ### 关键知识点一:递归函数设计 递归函数`find...

    递归删除,复制文件夹

    在删除文件或文件夹时,如果文件夹包含子文件夹和文件,直接删除可能会失败,因为操作系统不允许删除非空文件夹。递归删除策略就是从最深层的子文件或文件夹开始,逐级向上,直到删除整个文件夹结构。 1. **初始化*...

    亲测有效,C#通过配置文件,线程定时递归删除文件夹下所有文件,包括子文件夹中的文件,log4net记录删除日志

    递归删除涉及对文件夹的深度优先搜索,逐级遍历子文件夹并删除其中的所有文件。使用`Directory.GetFiles`和`Directory.GetDirectories`方法获取文件和子目录,然后配合`File.Delete`和`Directory.Delete`进行删除...

    一个递归删除指定目录和文件的例子

    结合这些文件,我们可以推测这是一个简单的Windows GUI应用程序,用户通过对话框选择一个目录,然后程序递归删除所选目录及其内容。实际实现可能更复杂,包括错误处理、用户界面反馈等,但基本思路就是上述的递归...

    非递归删除非空目录(源代码)

    然而,要实现非递归删除非空目录,我们需要更复杂的方法。这通常涉及到遍历目录中的所有子项,先删除文件,再删除子目录,最后删除目标目录自身。这个过程可以使用`FindFirstFile`、`FindNextFile`和`FindClose`函数...

    Java语言描述递归删除

    Java语言中的递归删除是一种常见的文件操作,尤其在处理文件夹结构时非常有用。递归是一种编程技术,它允许函数或方法调用自身来解决复杂问题。在这个Java程序中,递归被用来遍历和删除指定目录及其子目录中的所有...

    windows下解决无法删除文件

    为了解决这个问题,我们可以创建一个批处理文件来强制删除文件或文件夹。批处理(.bat)文件是包含一系列DOS命令的文本文件,可以一次执行多个命令,对于解决权限问题非常有效。以下是一个简单的批处理脚本示例: 1...

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

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

    递归删除一个节点以及该节点下的全部节点示例_.docx

    在本示例中,我们看到的是一种递归删除操作,主要用于数据库中的部门管理。递归在这里被用来删除一个部门及其所有子部门。下面将详细解释这段代码的工作原理和递归在其中的作用。 首先,`del` 函数接受一个参数 `$...

    采用递归查询文件

    1. 数据恢复:当需要恢复丢失或误删除的文件时,可以通过递归遍历硬盘上的所有扇区来查找残留的数据。 2. 日志分析:在大型系统中,日志文件可能分布在多个目录下,递归查询可以帮助快速定位到含有关键信息的日志...

    DeleteFiles:Windows 控制台实用程序通过可选的日期过滤递归删除文件和文件夹

    西风删除文件 用于递归删除文件和文件夹的 Windows 实用程序,支持深度文件嵌套和可选的时间偏移过滤这个小型控制台实用程序递归删除文件和文件夹,并允许按日期过滤文件。 删除具有简单文件规范的文件,例如c:\temp...

    文件,遍历文件,文件递归,文件查找

    文件系统负责管理和组织这些文件,包括创建、打开、读取、写入、移动和删除等操作。 2. 遍历文件: 遍历文件通常是指程序按照特定顺序访问一个目录中的所有文件和子目录的过程。在编程中,这可以通过迭代目录结构来...

    VC++ 递归文件夹

    3. **递归删除文件**:要删除文件,可以使用`DeleteFile`函数。这个函数接受一个文件路径作为参数,如果文件存在且可删除,它会删除该文件。但需要注意的是,这个函数无法删除空文件夹,所以不能直接用于删除文件夹...

    自己写的php 递归无限分类 附有sql文件

    递归是一种算法,它通过调用自身来解决问题。在无限分类中,递归常被用来遍历层级关系,例如在数据库中的分类表中,每个类别可能有多个子类别,而这些子类别又可以有各自的子类,形成一种树状结构。PHP的递归函数...

    windows强制删除文件

    "Windows强制删除文件"这个主题就是针对这类情况提供解决方案的。通常,当我们尝试删除一个被占用的文件时,Windows会提示我们“文件正在被另一个程序使用”,这时候就需要采用一些特殊的方法来强制删除。 在这个...

Global site tag (gtag.js) - Google Analytics