读取目录并用树的形式显示出来,显示总的字节数和大小
/** * */ 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("========================"); } }