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.
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.)