Java - 遍厉目录,实现目录删除,取得目录大小及深度

 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;
}
}
以上的类就实现了对目录的操作,包括删除,取大小以及深度。
其中在取目录深度时,我是通过分割字符串来求得其所有子目录相对于根目录的深度,然后再减去输入目录相对于根目录的深度,就得到了输入目录的深度。感觉这个方法执行效率不高,哪位朋友有更好的方法还望不吝赐教。

 

来源:http://www.yeegle.com/favorite/view/107

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值