龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

实现目录删除,取得目录大小及深度

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
import Java.io.*; import java.util.*; public class ManageContent { private int dir_deep=0; private int dir_size = 0; private int sourcepath_deep; //输入路径相对于根目录的深度 private Hashtable ht=new Hashtable(); //储存输入路

  import Java.io.*;
  import java.util.*;
  
  public class ManageContent {
   private int dir_deep=0;
   private int dir_size = 0;
   private int sourcepath_deep; //输入路径相对于根目录的深度
   private Hashtable ht=new Hashtable(); //储存输入路径下的所有子目录,及其相对于根目录的深度keys=(String)dirPath,values=(Integer)dirDeep
  
   public synchronized int getSize(String dir_path) throws FileNotFoundException {
  File dir = new File(dir_path);
  if (!dir.exists()) {
   throw new FileNotFoundException();
  }
  if (!dir.isDirectory()) {
   dir_size = (int) dir.length();
  }
  else {
   File[] fe = dir.listFiles();
   for (int i = 0; i < fe.length; i++) {
  if (fe[i].isDirectory()) {
   getSize(fe[i].toString());
  }
  else {
   dir_size += fe[i].length();
  }
   }
  }
  return dir_size;
   }
  
   public synchronized void deleteFiles(String dir_path) throws FileNotFoundException {
  File file = new File(dir_path);
  if (!file.exists()) {
   throw new FileNotFoundException();
  }
  if (file.isDirectory()) {
   File[] fe = file.listFiles();
   for (int i = 0; i < fe.length; i++) {
  deleteFiles(fe[i].toString());
  fe[i].delete(); //删除已经是空的子目录
   }
  }
  file.delete(); //删除总目录
   }
  
   private void allDeep(File file){
  File[] fe = file.listFiles();
  for (int i = 0; i < fe.length; i++) {
   if (fe[i].isDirectory()) {
  allDeep(fe[i]); //取得其所有子目录的深度
  ht.put(fe[i].toString(),new Integer(count(fe[i].toString()) - sourcepath_deep));
   }
  }
   }
  
   public synchronized int getDeep(String dir_path) throws FileNotFoundException{
  File file = new File(dir_path);
  if (!file.exists()) {
   throw new FileNotFoundException();
  }
  if(!file.isDirectory()){
   return -1; //输入路径不是目录时就返回-1
  }
  sourcepath_deep=count(file.toString());
  allDeep(file);
  Enumeration enum=ht.keys();
  int max=0;
  String keys;
  Integer values;
  while(enum.hasMoreElements()){
   keys=(String)enum.nextElement();
   values=(Integer)ht.get(keys);
   if(values.intValue()>max)
  max=values.intValue();
  }
  return max;
   }
  
   private int count(String str){
  String regEx="/";
  if(System.getProperty("file.separator").equals("")) //windows和unix下的路径分割符不一样
    regEx="";
  return str.split(regEx).length;
   }
  }
  以上的类就实现了对目录的操作,包括删除,取大小以及深度。
  
  其中在取目录深度时,我是通过分割字符串来求得其所有子目录相对于根目录的深度,然后再减去输入目录相对于根目录的深度,就得到了输入目录的深度。
  
精彩图集

赞助商链接