读取目录并用树的形式显示出来,显示总的字节数和大小

/**
 * 
 */
package com.xiejiachen.File;

import java.io.File;
import java.util.Iterator;

/**
 * @author XIEJIACHEN
 *
 */
public class Tree_Structure_Display_File {
	
	static int dirs = 0;// 用于存放统计出来的目录的数量和文件的数量
	static int files = 0;
	static long dirLength = 0;//用于存放统计出来的目录大小和文件大小
	static long fileLength = 0;
	static String preStr = ""; //定义缩进量,用于以树形结构展现层级
	File file = null;
	
	public Tree_Structure_Display_File(File file) {
		super();
		this.file = file;
	}
	
	/**
	 * @param file
	 * @param level
	 * 全局变量在程序销毁之前,变量会一直保存在内存当中,会造成上一次运行的值保留下来,当
	 * 再次执行的时候就会重复累加,这样的后果就是同级目录会产生分级
	 * 所以要定义一个局部变量
	 * 每次运行的时候更新相应的全局变量,因为局部变量在方法每次执行完时都被销毁,也就是每次执行
	 * 该方法的时候,这个局部变量都不一定是相同的值,这样就可以避免累加
	 */
	public void tree(File file,int level) {
		
		String preStr = "";
		this.preStr = preStr;
		
		for (int i = 0; i < level; i++) {
			
			preStr +="\t"; //判断level的层级数,每多一层就添加一个间隔
		}
		//定义文件数组,用存放获取到的文件目录和文件
		File[] childs = file.listFiles();
		
		for (int i = 0; i < childs.length; i++) {
			
			//用循环取出,childs[i].isDirectory()用于判断取出来的
			//是文件还是目录
			if (childs[i].isDirectory()) {
				
				dirs++; //获取一个目录就自加一次,记录数量
				
			}else{
				
				files++; //获取一个文件就自加一次,记录数量
				fileLength=childs[i].length(); //该文件大小(字节数)
				dirLength +=childs[i].length(); //将获取到的每个文件的大小加起来
				
			}
			if(!childs[i].isDirectory()){
				
				//打印搜索出的文件和目录,如果是文件就显示文件字节数
				System.out.println(preStr + childs[i].getName()+""+fileLength+"字节");
				
			}else{
				
				System.out.println(preStr+childs[i].getName());
				System.out.println(preStr + "------------");
					
			}
			if (childs[i].isDirectory()) {
				
				//判断师傅是目录,如果是,就再次执行tree()方法,将子目录里面的文件再次遍历出来
				tree(childs[i], level+1);
				
			}
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//给出指定目录
		File file = new File("E:/Eclipse Work");
		
		Tree_Structure_Display_File file2 = new Tree_Structure_Display_File(file);
		
		//打印指定目录,即最顶层目录
		System.out.println("目标是:" + file.getName());
		
		//遍历文件目录并打印
		file2.tree(file, 1);
		System.out.println("========================");
		
		//打印目录数量和字节数
		System.out.println("这个目录中共:" + dirs + "个目录");
		
		//打印文件数量和字节数
		System.out.println("这个目录中有:" + files + "个文件" + "" + "共" + dirLength + "字节");
		System.out.println("========================");
	}

}

  

posted @ 2019-07-16 18:13  xiejiachen  阅读(374)  评论(0)    收藏  举报