`

使用递归操作文件的两个例子

阅读更多

1.使用递归删除某一目录下的全部文件

package com.lfl.file;

import java.io.File;

public class DeleteAllFileTest {
	
	public static void deleteAll(File file) {
		if (file.isFile() || file.list().length == 0) {
			file.delete();
		} else {
			File[] files = file.listFiles();
			for (File f : files) {
				deleteAll(f);
				f.delete();
			}
			file.delete();
		}
	}
	
	

	public static void main(String[] args) {
		File file = new File("G:\\myfirstsite222");
		deleteAll(file);
	}

}

 

 

2.使用递归遍历某一目录下的所有文件,并以树形结构显示

package com.lfl.file;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class ListAllFileTest {
	
	private static int level;
	
	public static void deepList(File file) {
		if (file.isFile() || file.list().length == 0) {
			return;
		} else {
			File[] files = file.listFiles();
			files = sort(files);
			for (File f : files) {
				StringBuilder output = new StringBuilder();
				if (f.isFile()) {
					output.append(getLevel(level));
					output.append(f.getName());
				} else {
					output.append(getLevel(level));
					output.append(f.getName());
					output.append("\\");
				}
				System.out.println(output.toString());
				
				if (f.isDirectory()) {
					level ++;
					deepList(f);
					level --;
				}
			}
			
		}
	}
	
	
	public static File[] sort(File[] files) {
		List<File> list = new ArrayList<File>();
		List<File> fileList = new ArrayList<File>();
		for (File f : files) {
			if (f.isDirectory()) 
				list.add(f);
			else 
				fileList.add(f);
		}
		list.addAll(fileList);
		return list.toArray(new File[files.length]);
	}
	
	public static String getLevel(int level) {
		StringBuilder sb = new StringBuilder();
		for (int i=0; i < level; i++) {
			sb.append("\t");
		}
		return sb.toString();
	}
	
	
	

	public static void main(String[] args) {
		File file = new File("G:/222");
		deepList(file);
	}

}

 

 

分享到:
评论

相关推荐

    栈和递归遍历实例

    初学者资料,使用栈和递归实现遍历电脑磁盘文件,通过本资料,可以非常方便的学习与对比两种实现方法的不同。 两个例子,全部使用的是异步执行方法,并且有当前遍历的进度显示。

    rar压缩软件.rar

    包含两个掩码,并且所有文件既匹配第一个掩码,也匹配第二个掩码, 较小的子集 或者更精确的匹配拥有更高的优先权。例如,如果你用 *.cpp 和 f*.cpp 掩码, f*.cpp 拥有更高的优先权。 RAR 命令行语法 ~~~~~~...

    WinRAR_4.0.exe

    包含两个掩码,并且所有文件既匹配第一个掩码,也匹配第二个掩码, 较小的子集 或者更精确的匹配拥有更高的优先权。例如,如果你用 *.cpp 和 f*.cpp 掩码, f*.cpp 拥有更高的优先权。 RAR 命令行语法 ~~~~~~...

    fsops:fsops以串行同步方式对文件和目录进行操作。 包括mkdirs,递归删除,复制已更改,重新应用更改

    showChangesToReapply:在两个“较新”和“较旧”的目录之间执行差异。 reapplyChanges:应用更改以使另一个目录处于相同状态 例子: // require the fsops module var fsops = require ( "fsops" ) ; // copy a ...

    java源码包---java 源码 大量 实例

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    Python 如何对文件目录操作

    本文主要通过两个简单的小例子,简述Python在文件夹及文件的应用,仅供学习分享使用,如有不足之处,还请指正。 涉及知识点 os模块:os 模块提供了非常丰富的方法用来处理文件和目录。 open方法:open方法用于打开一...

    JAVA上百实例源码以及开源项目

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    java源码包2

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    java源码包3

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    java源码包4

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用...

    JAVA上百实例源码以及开源项目源代码

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    Linux高级bash编程

    每个[list]元素带两个参数的for循环 10-3. 文件信息:对包含在变量中的文件列表进行操作 10-4. 在for循环中操作文件 10-5. 在for循环中省略[list] 10-6. 使用命令替换来产生for循环的[list] 10-7. 对于二进制文件的...

    gnu_makefile文档pdf html

    6.2变量的两个特色 6.3变量高级引用技术 6.3.1替换引用 6.3.2嵌套变量引用 6.4变量取值 6.5设置变量 6.6为变量值追加文本 6.7override指令 6.8定义多行变量 6.9环境变量 6.10特定目标变量的值 6.11特定...

    Advanced Bash-Scripting Guide <>

    每个[list]元素带两个参数的for 循环 10-3. 文件信息:对包含在变量中的文件列表进行操作 10-4. 在for 循环中操作文件 10-5. 在for 循环中省略[list] 10-6. 使用命令替换来产生for 循环的[list] 10-7. 对于二进制...

    GNU make 中文手册 网页版

    4.1 一个例子 4.2 规则语法 4.3 依赖的类型 4.4 文件名使用通配符 4.4.1 统配符使用举例 4.4.2 通配符存在的缺陷 4.4.3 函数wildcard 4.5 目录搜寻 4.5.1 一般搜索(变量VPATH) 4.5.2 选择性搜索(关键字...

Global site tag (gtag.js) - Google Analytics