Espaco usado em disco![RESOLVIDO]

6 respostas
dijava

pessoal estou com um pequeno problema, estou fazendo relatorio em formato de “pizza” com relação ao tamanho usado em disco, o problema é que esta dando o mesmo tamanho para 3 pastas diferentes

File fileImagem = new File("/opt/my/imagem/");
File fileSom = new File("/opt/my/som/");
File fileVideo = new File("/opt/my/video/");

System.out.println("Imagem " + fileImagem.getUsableSpace() + " GB");
System.out.println("Video " + fileVideo.getUsableSpace() + " GB");
System.out.println("Som " + fileSom.getUsableSpace() + " GB");

o logger

Imagem [telefone removido] GB
  Som [telefone removido] GB
  Video [telefone removido] GB

alquem sabe o pq ?

6 Respostas

M

Você está pegando o “usable space” (espaço usável).
Acho que vc deveria usar o getTotalSpace().
:slight_smile:

M

E o tamanho é em bytes, então vc deve fazer alguma divisão para chegar ao tamanho em GB.

dijava

eu sei tenho q dividir por [telefone removido], só nao coloquei, mas coloquei o “getTotalSpace” e olha q retornou

Imagem [telefone removido] GB
"getTotalSpace" Imagem 107479732224 GB
 Som [telefone removido] GB
"getTotalSpace" Som 107479732224 GB
 Video [telefone removido] GB
"getTotalSpace" Video 107479732224 GB

os mesmos numeros !

M

Desculpa, na verdade nunca tinha usado esse método, só consultei o javadoc e achei que ele retornaria isso, mas na verdade ele pega o tamanho da partição.

Porém, pesquisando um pouco, parece que a única forma é usar o .length(), que retorna o tamanho de um ARQUIVO. Para saber o tamanho da pasta, deveria ser feito recursivamente para todas as subpastas, veja o código que adaptei do http://www.roseindia.net:

public static long getFolderSize(File folder) { long foldersize = 0; File[] filelist = folder.listFiles(); for (int i = 0; i < filelist.length; i++) { if (filelist[i].isDirectory()) { foldersize += getFolderSize(filelist[i]); } else { foldersize += filelist[i].length(); } } return foldersize; }

Testei aqui e funcionou… O único problema é que demora alguns segundos.

M

Comentário adicional… Se quer uma boa precisão, divida por [telefone removido], e não por [telefone removido]. Cada kB é 1024 B, e não 1000. Normalmente não tem problema arredondar, mas acaba fazendo uma diferença significativa.

dijava

po muito obrigado !, eu pensei nessa solucao mas achava q ja teria metodo pronto para isso, mas de qualquer forma obrigado !

Criado 6 de dezembro de 2010
Ultima resposta 6 de dez. de 2010
Respostas 6
Participantes 2