`

黑马程序员23-1: File深度遍历目录,取出目录/文件,删除目录/文件,递归

 
阅读更多
------- android培训 java培训、期待与您交流!-------



package cn.itcast.io.p1.file.test;

import java.io.File;

/*
 * 需求:对指定目录进行所有内容的列出(包含子目录中的内容)
 * 也可以理解为 深度遍历。
 * 
 * 
 */

public class FileTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		File dir = new File("e:\\demodir");
		
		listAll(dir,0);
	}

	public static void listAll(File dir,int level) {
		
	
		System.out.println(getSpace(level)+dir.getName());
		//获取指定目录下当前的所有文件夹或者文件对象
		//
		level++;
		//取出当前所有的文件及文件夹,放到文件数组中,仅仅是当期那,不做深度遍历
		File[] files = dir.listFiles();
//		for(File file : files){
//			System.out.println("*****files****:" + file);
//		}
		
		for(int x=0; x<files.length; x++){
			//如果当前有目录存在,递归进行查询列表功能,按顺序对已有目录进行深度遍历
			if(files[x].isDirectory()){
				listAll(files[x],level);
				//递归到底后,逐层跳出,使用上一层的数据,继续往下面的语句执行
			}
			else{
				System.out.println(getSpace(level)+files[x].getName());
			}
				
		}	
	}

	private static String getSpace(int level) {
		
		StringBuilder sb = new StringBuilder();
		
		sb.append("|--");
		for(int x=0; x<level; x++){
			sb.insert(0,"|  ");
		}
		
		return sb.toString();
	}
	

}



package cn.itcast.io.p1.file.test;

import java.io.File;


/*
 * 删除一个带内容的目录。 
 * 
 * 原理:必须从最里面往外删。 
 * 需要进行深度遍历。
 * 
 * 
 * 
 */
public class RemoveDirTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		File dir  = new File("e:\\demodir");
//		dir.delete();
		removeDir(dir);
	}

	//遍历目录,删除文件,删除目录
	public static void removeDir(File dir) {
		//取出当前目录的文件及文件夹
		File[] files = dir.listFiles();
		
		for(File file : files){
			//如果文件夹存在,则继续遍历文件夹
			if(file.isDirectory()){
				removeDir(file);
			}else{
				//不存在,则删除当前文件
				//如果此路径名表示一个目录,则该目录必须为空才能删除。 
				System.out.println(file+":"+file.delete());
			}
		}
		//删除当前目录
		System.out.println(dir+":"+dir.delete());
	}
	

}



package cn.itcast.io.p1.digui;

public class DiGuiDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		
		/*
		 * 递归:
		 * 函数自身直接或者间接的调用到了自身。 
		 * 
		 * 一个功能在被重复使用,并每次使用时,参与运算的结果和上一次调用有关。 
		 * 这时可以用递归来解决问题。 
		 * 
		 * 
		 * 注意:
		 * 1,递归一定明确条件。否则容易栈溢出。 
		 * 2,注意一下递归的次数。 
		 * 
		 */
//		show();
//		toBin(6);
		int sum = getSum(9000);
		
		System.out.println(sum);
	}
	
	public static int getSum(int num){

		int x = 9;
		if(num==1)
			return 1;
		
		return num+getSum(num-1);
		
	}
	
	public static void toBin(int num){
		if(num>0){
			
			toBin(num/2);
			System.out.println(num%2);
			
		}
	}
	
	/*
	public static void show(){
		
		method();
		
	}
	public static void method(){
		show();
	}
	*/
	

}




------- android培训 java培训、期待与您交流!-------


详细请查看:http://edu.csdn.net/heima -------

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics