`
xiaoming123123
  • 浏览: 98818 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

以树形方式展现出该目录中的所有子目录和文件

    博客分类:
  • J2SE
阅读更多
/*
 * 题目:给定任意一个目录,以树形方式展现出该目录中的所有子目录和文件。
 * 另外,在展现的时候将目录排在上面,文件排在下面。每一层要加上缩进
 */

package com.io;

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

public class ListAllTest {

	//用于判断目录或文件所处的层次
	private static int time;
	
	//递归的方法
	public static void deepList(File file) {
		
		if(file.isFile() || 0 == file.listFiles().length) {   //递归出口,判断是不是文件或者目录里面没有内容
			return ;
		}
		else {
			File[] files = file.listFiles();
			files = sort(files);
			
			for(File f : files) {
				StringBuffer output = new StringBuffer();
				
				if(f.isFile()) {
					
					output.append(getTabs(time));
					output.append(f.getName());
				}
				else {
					
					output.append(getTabs(time));
					output.append(f.getName());
					output.append("\\");
				}
				
				System.out.println(output);
				
				if(f.isDirectory()) {
					time++;
					deepList(f);
					time--;
				}
			}
		}
	}
	
	//整理文件数组,使用目录排在文件之前
	private static File[] sort(File[] files) {
		
		ArrayList<File> sorted = new ArrayList<File>();
		
		//寻找到所有的目录
		for(File f : files) {
			
			if(f.isDirectory()) {
				sorted.add(f);
			}
		}
		
		//寻找到所有的目录
		for(File f : files) {
			
			if(f.isFile()) {
				sorted.add(f);
			}
		}
		
		return sorted.toArray(new File[files.length]);
	}
	
	//判断需要加多少tab的方法
	private static String getTabs(int time) {
		
		StringBuffer buffer = new StringBuffer();
		
		for(int i = 0; i < time; i++) {
			buffer.append("\t");
		}
		
		return buffer.toString();
	}
	
	public static void main(String[] args) {
		
		File file = new File("f:" + File.separator + "ghost");
		deepList(file);
	}
}

分享到:
评论
1 楼 ilysys 2011-11-13  

相关推荐

Global site tag (gtag.js) - Google Analytics