递归求一个目录里的所有文件的大小,但执行后发现:
1、每个文件的大小都是0
2、进入不了子目录,即达不到递归的目的注:totalsize是一个定义在类里的静态long变量public void countfile(String dir) { File file = new File(dir);
System.out.println(file.getName()+file.isDirectory());
if (file.isDirectory()){
String[] files;
files = file.list();
// Sort the list of filenames.
java.util.Arrays.sort(files);
for (int i = 0; i < files.length; i++){
countfile(files[i]);
}
}else{
totalsize += file.length();//totalsize is static long
}
}
1、每个文件的大小都是0
2、进入不了子目录,即达不到递归的目的注:totalsize是一个定义在类里的静态long变量public void countfile(String dir) { File file = new File(dir);
System.out.println(file.getName()+file.isDirectory());
if (file.isDirectory()){
String[] files;
files = file.list();
// Sort the list of filenames.
java.util.Arrays.sort(files);
for (int i = 0; i < files.length; i++){
countfile(files[i]);
}
}else{
totalsize += file.length();//totalsize is static long
}
}
这一句有问题,file.list()方法返回的文件名是短文件名,即不包括路径的,比如:C:\fff\ddd
ddd是文件夹,可以返回是"ddd",而不是"C:\fff\ddd".
所以进不了子目录
递归时
for (int i = 0; i < files.length; i++){
countfile(files[i]);
改为
for (int i = 0; i < files.length; i++){
countfile(file.getAbsolutePath()+files[i]);
totalSize = countX(new File(dir));
}
public static long countX(File f) {
if(!f.isDirectory())
return f.length();
File[] files = f.listFiles();
long sum = 0;
for(int i = 0; i < files.length; i++)
sum += countX(files[i]);
return sum;
}