这个应该是windows文件系统和Linux文件系统的差异。
存储同样大小的文件,在windows上面和在Linux上面占用的空间大小是不同的。
鸟哥的私房菜里面应该是第八章吧,专门讲文件系统的,楼主可以去看一下。

解决方案 »

  1.   

    public long getDirSpace(File mydir) {
            if (mydir == null || !mydir.isDirectory()) {
                return -1;
            }
            long dirSize = 0;
            File[] dirFiles = mydir.listFiles();
            for (File curFile : dirFiles) {
                if (curFile.isFile()) {
                    dirSize += curFile.length();
                } else {
                    dirSize += getDirSpace(curFile);
                }
            }
            return dirSize;
        }我怎么感觉这块代码有点问题?
      

  2.   


    这段代码中进行了递归调用,每次递归调用的时候dirSize都会被重新初始化为0,所以需要将dirSize变成全局变量,楼主,OK?
      

  3.   


    这段代码中进行了递归调用,每次递归调用的时候dirSize都会被重新初始化为0,所以需要将dirSize变成全局变量,楼主,OK?根本不是这么回事,你不了解递归。
      

  4.   

    硬盘格式不一样,比如你从fat复制一个文件到ntfs上,大小就会变,很正常
      

  5.   

    总感觉lz的代码有点怪,又说不出来那里怪
    问lz个问题,这段代码你想放在哪里用?怎么用?
    如果只是想计算个大概的大小的话这样就行
    如果要精确统计的话那么建议用io读一下count一下byte数
      

  6.   


    呃,这代码怪??应该不怪啊,递归写法,有人说dirSize每次递归时都会被重置为0,呵呵。
    上面那代码就直接在main里调用,也是获取每个(子)文件的length,然后求和啊。
      

  7.   


    呃,这代码怪??应该不怪啊,递归写法,有人说dirSize每次递归时都会被重置为0,呵呵。
    上面那代码就直接在main里调用,也是获取每个(子)文件的length,然后求和啊。
    你的代码是正确的,获得的是文件在磁盘上存储的大小.
    所以不同的磁盘格式,不同的操作系统有可能会获得不同的结果.
    如果要获得文件的精确大小,那只有一个一个字节数过去了. 这个还要慢
      

  8.   

    Linux对于文件夹大小的统计和Windows不同吧。。
    比如Linux将子文件夹也视为一个文件,所以文件夹自身大小应该也算进去了