2012-10-29 12 views
5

Attualmente sto usando il metodo FileUtils.sizeOfDirectory (File file) apache-commons per ottenere le dimensioni di una directory. Ciò di cui ho effettivamente bisogno è la dimensione della directory sul disco, quella visualizzata dall'utility du in Unix, solo per essere chiari.Dimensione directory Java su disco?

È possibile ottenere queste informazioni in Java?

risposta

8

du trova queste informazioni ricorsivamente attraverso l'intero albero di directory e aggiungendo le dimensioni di tutti i file che trova. (Dopo aver arrotondato le dimensioni di ciascun file a un'unità di allocazione, penso, e come si scopre che cos'è l'unità di allocazione, non lo so).

Dovrete fare lo stesso, o generare un processo esterno du per farlo per voi.

+0

Non voglio spawn du perché ho bisogno che il codice sia indipendente dalla piattaforma. Proverò a esaminare la gestione delle unità di allocazione. Grazie – Husker14

2

È necessario cercare in modo ricorsivo nell'albero delle cartelle.

Se stai usando Java 7 è bello e veloce.

Files.walkFileTree(file.toPath(), new SimpleFileVisitor<Path>(){ 
    @Override 
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { 
     size += attrs.size(); 
     return super.visitFile(file, attrs); 
    } 
}); 

In Java 6 è necessario utilizzare File.listFiles() ricorsivo e manualmente controllare ogni dimensione del file. Essere consapevoli però che questo è molto lento. Quindi se stai guardando un gran numero di file potrebbe valere la pena trovare una soluzione che genera un comando esterno.

+1

Non ho bisogno della dimensione del file (che è quella restituita dal metodo size()), ma lo spazio occupato dal file su disco (un file da 10 byte potrebbe occupare 32 byte, ad esempio). – Husker14

+0

Ah, capisco. Scusate. Ti ho frainteso. – Nano

+1

questo potrebbe aiutare quindi: http://stackoverflow.com/questions/25552/using-java-to-get-os-level-system-information – Nano