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

递归文件操作(续二)

    博客分类:
  • JAVA
阅读更多

   写写代码,练练手,改进了上次的递归文件操作实现类,记录业余生活...备忘本

/**
 *  文件删除操作,递归枚举给定的目录,并将其中(包括子目录)所有的*.bak,*.tmp文件删除,
 *  同时也将.svn目录删除掉(以及该目录下的文件、文件夹全部删除)。
 */


import java.io.*;
import java.util.*;

/**
 * windows XP
 * @author zxb 
 * @date 2009-10-09
 * java version "1.5.0_06"
 */
public class RecurDelDirOrFile {

	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) {
		try {
			//String path = "d:" + File.separator + "socket2";// 传递的文件夹目录
			String path = "D:\\work\\项目\\platform\\platform-core";// 传递的文件夹目录
			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));
			}
			List<String> filter=new ArrayList<String>();
			filter.add(".bak");
			filter.add(".tmp");
			System.out.println("正在删除,请稍后......");
			deleteFiles(path, false, true,0.1d,filter);//0.1d 表示100毫秒  缓冲时间
			System.out.println("删除完成......");
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	// 文件夹和文件的迭代实现列举 过滤
	public static void findFiles(String path,final boolean boo,final List<String> filter) 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 ( boo ||(pathname.isDirectory() && fileName
									.equals(".svn"))){
						list1.add(pathname.getPath());
						File[] fs_s=pathname.listFiles();
						if(fs_s!=null)
						for (int i = 0; i < fs_s.length; i++) {
							if (fs_s[i].isDirectory()) {
								list1.add(fs_s[i].getPath());
								try {
									findFiles(fs_s[i].getPath(),true,filter);
								} catch (Exception e) {
									e.printStackTrace();
								}
							} else {
								list2.add(fs_s[i].getPath());
							}
						}
						return true;
					}else{
						if(pathname.isDirectory()){
							try {
								findFiles(pathname.getPath(),false,filter);
							} catch (Exception e) {
								e.printStackTrace();
							}
						}else {
							for (int i = 0; i < filter.size(); i++) {
							if(pathname.getName().toLowerCase().endsWith(filter.get(i))){
									list2.add(pathname.getPath());
								}
							}
						}
						return false;
					}
				}
			});
			for (int i = 0; i < fs.length; i++) {
				if (fs[i].isDirectory() ) {
					list1.add(fs[i].getPath());
					findFiles(fs[i].getPath(),false,filter);
				} else {
					list2.add(fs[i].getPath());
				}
			}
		}else{
			list2.add(f.getPath());
		}
	}

	/**
	 * 文件删除操作 c:\\test
	 * @param fileName    文件目录路径名
	 * @param deleteSelf  是否删除自身
	 * @param deleteDir   是否删除目录
	 * @param time        以秒计算文件删除的缓冲时间
	 * @param filter      过滤条件
	 * @return boolean
	 * @throws Exception
	 */
	public static boolean deleteFiles(String fileName, boolean deleteSelf,
			boolean deleteDir,double time,List<String> filter) 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,false,filter);
				for (int i = 0; i < list2.size(); i++) {
					Thread.sleep((int)time*1000);// 延迟删除
					synchronized(new Object()){
						new File(list2.get(i).toString()).delete();// 文件删除
						//System.out.println(list2.get(i) + "====文件删除成功!");
					}
				}
				Thread.sleep((int)(list2.size()*time*500));//延迟删除
				for (int i = list1.size() - 1; i >= 0 && deleteDir; i--) {// 倒置删除,从深层次目录删除目录结构
					new File(list1.get(i)).delete(); // 文件夹删除
					//System.out.println(list1.get(i) + "====文件夹删除成功!");
				}
			} catch (Exception ex) {
				System.out.println("删除文件过大,请把缓冲时间设置大些...\n");
				ex.printStackTrace();
				return false;
			}
		}
		if (deleteSelf) {
			f.delete();
		}
		return true;
	}

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

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

 

分享到:
评论

相关推荐

    Java上传文件到FTP服务器,支持断点续传.rar

    java实现ftp断点续传,上传文件到FTP服务器,支持断点续传,同时支持LINUX主机,代码里面包括了比较多的java网络操作类,比如连接FTP的常规类、递归创建远程服务器目录 上传文件到服务器,新上传和断点续传操作,远程...

    七牛云文件批量上传,下载C#

    在IT行业中,七牛云是一个知名的云存储服务提供商,提供了丰富的API和SDK,方便开发者进行文件的上传、下载以及管理。本项目主要涉及的是使用C#语言...通过这样的项目实践,可以提升你在云存储和文件操作方面的技能。

    Java文件夹复制(远程复制(网络传输),用于远程备份文件)

    Java文件夹复制功能是通过编程实现的,主要涉及到文件操作和网络通信两个核心知识点。这里有两个关键类:`FileSelection` 和 `BackupClient`。`FileSelection` 类用于选择和组织待复制的文件,而 `BackupClient` 类...

    java操作ftp下载

    通过FTP,我们可以实现远程服务器上的文件上传、下载以及管理等操作。本教程将详细讲解如何使用Java来实现FTP文件的下载功能,特别是递归下载整个文件夹。 首先,我们需要引入Java的FTP客户端库,如Apache Commons ...

    FTP文件夹上传及断点续传

    6. 上传文件和子文件夹:对每个文件执行PUT操作,对每个子文件夹执行MKD(Make Directory)操作,然后递归上传子文件夹内容。 二、断点续传 断点续传是在上传或下载过程中,如果因网络问题或其他原因中断,可以从...

    Delphi客户端通过FTP服务器上传或下载文件或图片方法

    本文档将详细介绍如何使用Delphi客户端通过FTP服务器实现文件或图片的上传和下载操作。Delphi是一种非常强大的开发工具,广泛应用于Windows应用程序开发。通过利用Delphi提供的组件库(包括Indy组件),我们可以轻松...

    Xftp/远程上传文件工具

    Xftp是一款强大的文件传输协议(FTP)客户端,尤其在与Linux系统进行远程文件操作时表现卓越。它由Netsarang公司开发,设计简洁、功能丰富,为用户提供了一个安全、高效的文件传输环境。Xftp与Xshell搭配使用,能够...

    FTP 文件同步 C#

    8. **断点续传**:对于大文件,实现断点续传功能可以提高效率,避免因网络问题重传整个文件。这需要保存已传输的文件部分信息,并在下次传输时继续。 9. **身份验证**:除了基本的用户名和密码认证,FTP还支持其他...

    马士兵课程笔记(续5)

    此外,Java还提供了`java.nio.file`包,其中的`Path`和`Files`类提供了更现代、更高效的文件操作方式,例如使用`Files.walk()`方法可以更简洁地实现文件树的遍历。 总之,通过`ListFilesTree.java`和`ListFilesTree...

    文件copy 目录copy

    在IT行业中,文件复制(File Copy)和目录复制(Directory Copy)是日常操作的重要组成部分,无论是数据备份、软件部署还是系统迁移,都离不开这两个基本功能。下面将详细讲解这两个概念及其相关知识点。 文件复制...

    FTP文件管理程序

    Java FTP文件管理程序是使用Java编程语言实现的FTP客户端应用程序,它允许开发者通过编写代码来执行上传、下载、删除等文件操作。这个Java开发模块大全涵盖了FTP连接、会话管理、目录浏览以及文件传输的核心功能,为...

    C# FTP上传文件管理器

    5. **文件操作**:包括重命名、移动、复制、删除等基本操作。这些操作需要考虑到FTP服务器的权限设置。 6. **多线程处理**:为了提高效率,文件上传和下载通常会采用多线程技术,同时处理多个任务。 7. **错误处理...

    大文件上传(无限制)-最新版

    `up6`可能是实现上述功能的源代码文件或编译后的二进制文件,这部分内容需要解压后查看才能进一步了解具体实现细节。 综上所述,此项目通过C#和ASP.NET实现了大文件及文件夹的无限制上传,同时提供文件和文件夹的MD...

    Android实现在线下载压缩包并解压到指定目录功能_文件下载功能实现.zip

    - **文件操作异常**:检查文件操作过程中可能出现的IOException,如文件已存在、磁盘空间不足等。 7. **优化与性能** - **异步处理**:下载和解压应在后台线程执行,避免阻塞UI线程。 - **内存管理**:合理控制...

    java下载文件、图片、文件夹.docx

    在处理大文件时,可能需要使用流式操作避免内存溢出,或者采用断点续传技术提高用户体验。另外,考虑到安全性,你需要确保只有授权的用户能够访问和下载文件,避免敏感信息的泄露。 以上就是Java中下载文件、图片及...

    上传本地文件夹的文件到FTP服务器指定目录

    8. 自定义功能扩展:根据需求,你可以修改代码以实现更多功能,比如递归上传子目录、断点续传、文件大小检查等。 总之,上传本地文件夹的文件到FTP服务器指定目录是一个涉及FTP协议、C#编程和文件系统操作的综合...

    java实现ftp自动上传文件

    对于目录,需要递归地遍历并上传每个文件。 6. **目录操作**:使用`FTPClient`的`changeWorkingDirectory()`和`listDirectories()`方法可以切换当前工作目录和获取子目录列表。这在上传整个磁盘或特定目录时非常...

    JAVA文件传输器V2.0

    这个过程可能涉及到递归操作,确保每个文件都被正确处理。由于描述中提到该功能不稳定,可能是因为在处理复杂文件结构、大文件或者网络连接不稳定时存在bug,需要进一步的调试和完善。 文件发送的过程中,安全性也...

    具有粘贴,整个文件夹,多文件上传的控件demo(java)

    5. **Java实现**:Java作为一种跨平台的编程语言,提供了丰富的库和框架用于文件操作和网络通信。这个控件可能使用了Java的`java.io`和`java.nio`包来处理文件,以及HTTP客户端库(如Apache HttpClient或Java内置的...

    网络间用来同步文件和目录的工具

    7. **文件查找**:如描述中提到的“文件的递归查找”,能深度搜索目录及其子目录,找到所有匹配的文件。 在压缩包文件名“NetScan_Server 源码”中,我们可以推测这是一个用于网络扫描和文件同步的服务器端应用。...

Global site tag (gtag.js) - Google Analytics