2012-10-29 22 views
5

Obecnie używam metody Apache-commons FileUtils.sizeOfDirectory (File file), aby uzyskać rozmiar katalogu. To, czego naprawdę potrzebuję, to rozmiar katalogu na dysku, który jest wyświetlany przez narzędzie pod Unixem, aby było jasne.Rozmiar katalogu Java na dysku?

Czy można uzyskać te informacje w Javie?

Odpowiedz

8

du wyszukuje te informacje, przeglądając całe drzewo katalogów i dodając rozmiary wszystkich znalezionych plików. (Po zaokrągleniu każdego rozmiaru pliku do jednostki przydziału myślę, i jak dowiaduje się, czym jest jednostka alokacji, której nie znam).

Będziesz musiał zrobić to samo, lub odrodzić zewnętrzny proces du, aby zrobić to za Ciebie.

+0

Nie chcę spawnować du, ponieważ potrzebuję kodu, aby był niezależny od platformy. Spróbuję zajrzeć do zarządzania jednostkami alokacji. Dzięki – Husker14

2

Musisz przeszukiwać rekurencyjnie drzewo folderów.

Jeśli korzystasz z Java 7, jest ładna i szybka.

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); 
    } 
}); 

W Javie 6 trzeba użyć File.listFiles() rekurencyjnie i ręcznie sprawdzić każdy rozmiar pliku. Pamiętaj jednak, że jest to bardzo powolne. Jeśli więc patrzysz na dużą liczbę plików, być może warto znaleźć rozwiązanie, które spawnuje do zewnętrznego polecenia.

+1

Nie potrzebuję rozmiaru pliku (który jest zwracany przez metodę size()), ale miejsca zajmowanego przez plik na dysku (na przykład plik o rozmiarze 10 bajtów może zajmować 32 bajty). – Husker14

+0

Ah Widzę. Przepraszam. Nie rozumiem cię tam. – Nano

+1

może to pomóc: http://stackoverflow.com/questions/25552/using-java-to-get-os-level-system-information – Nano

Powiązane problemy