递归求一个目录里的所有文件的大小,但执行后发现:
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.   

    ---> files = file.list();
    这一句有问题,file.list()方法返回的文件名是短文件名,即不包括路径的,比如:C:\fff\ddd
    ddd是文件夹,可以返回是"ddd",而不是"C:\fff\ddd".
    所以进不了子目录
      

  2.   

    文件大小是0也是同样原因
    递归时
    for (int i = 0; i < files.length; i++){
      countfile(files[i]);
    改为
    for (int i = 0; i < files.length; i++){
      countfile(file.getAbsolutePath()+files[i]);
      

  3.   

    public static void count(String dir) {
        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;
     }