Obter Tamanho de uma Pasta

Alô galera.

Dei uma pesquisada aqui sobre o assunto, obtive um código (segue abaixo) que não me ajudou.

        File pasta = new File("c:\temp\");   
        double conversao = 9.31322575 * Math.pow(10, -10);   
           
        System.out.println("Total:" + pasta.getTotalSpace() * conversao);   
        System.out.println("Livre:" + pasta.getFreeSpace()  * conversao);   
        System.out.println("Usado:" + pasta.getUsableSpace()* conversao);          
    }

O código acima me retorna apenas o tamanho da pasta raíz… Ou seja, apenas o tamanho do C:

Como faço pra resgatar o tamanho de uma sub-pasta de C: ?
Aguardo respostas!

Desde já, obrigado.

    public static int getFolderSize(String path)  {   
    File folder = new File(path);   
    int size = 0;   
    if (folder.isDirectory()) {   
        String[] dirList = folder.list();   
        if (dirList != null) {   
            for (int i = 0; i < dirList.length; i++) {   
                String fileName = dirList[i];   
                File f = new File(path, fileName);   
                if (f.isDirectory()) {   
                    String filePath = f.getPath();   
                    size += getFolderSize(filePath);   
                    continue;   
                }   
                size += f.length();   
            }   
        }   
    }   
    return size;   
}  

Utilizando o código acima, chega mais perto do que eu precisava.

Ele retorna o tamanho…
Eu gostaria do tamanho em disco!

Como faria as alterações necessárias?

O tamanho de um diretório, no Windows, é sempre reportado como zero (embora ele ocupe mais espaço na MFT, "Master File Table". )
Provavelmente você quer somar os tamanhos dos arquivos nos diretórios e subdiretórios; isso requer uma rotina recursiva.
Exemplo:

import java.io.*;

class TamanhoAproximadoDiretorio {
    /**
     * Percorre um diretório e soma os tamanhos dos arquivos.
     * Atenção - esta rotina pode levar algum tempo para executar. 
     * @param dir Um diretório. 
     * @return A soma dos tamanhos dos arquivos no diretório e subdiretórios, em bytes.
     */
    long tamanho (File dir) {
        long ret = 0;
        for (File f : dir.listFiles()) {
            if (f.isDirectory()) {
                ret += tamanho (f);
            } else {
                ret += f.length();
            }
        }
        return ret;
    }

    public static void main(String[] args) {
        if (args.length < 1) {
            System.out.println ("Sintaxe: java -cp . TamanhoAproximado diretorio");
            System.exit (1);
        }
        TamanhoAproximadoDiretorio t = new TamanhoAproximadoDiretorio();
        File dir = new File (args[0]);
        // Aqui estou mostrando o tamanho usando a definição do Windows (1 MB = 1024 KB = 1.048.576 bytes)
        System.out.printf ("O diretório %s (e seus subdiretórios) ocupa %.3f megabytes%n", args[0], t.tamanho (dir) / 1048576.0);
    }
}

O espaço ocupado em disco não pode ser calculado usando-se Java puro; requer JNI.
Para saber o espaço exato, você precisaria pelo menos das seguintes informações:

  • Tamanho do cluster;
  • Se o arquivo é comprimido ou não.
    Para arquivos pequenos há um agravante porque ele pode ter sido copiado para a MFT, onde ele “não aparece” como ocupando algum espaço.

Desculpe a demora.

Como faço isso?
Existe alguma documentação que eu possa consultar?

Agradeço desde já.

Se você precisa saber isso no Windows, você precisa consultar o MSDN:
http://msdn.microsoft.com
e perguntar em um dos newsgroups, se seu inglês é bom. (Pode ser inglês vagabundo mesmo, porque os caras que respondem nesses newsgroups são indianos ou russos (ou mesmo brasileiros - tinha um tempo em que eu ficava de plantão no fórum de ATL e STL.)