Größe eines Directories ermitteln mit allen SubDIR`s

Status
Nicht offen für weitere Antworten.

PELLE

Bekanntes Mitglied
Hallo,

ich weiß das ist rekursion :lol: doch ich habe keinen Plan davon...

hat nicht jemand von euch schon mal sowas gecodet und möchte mich an seiner Weisheit teilhaben lassen?
 

The_S

Top Contributor
Hier ma meine zusammengebastlete weisheit nachts um halb 4 :p

Code:
public long dirSize(File dir) {

   File[] files = dir.listFiles();
   long size = 0;
   for (File file : files) {
      if (file.isDirectory()) {
         size += dirSize(file);
      }
      else {
         size += file.length();
      }
   }
   return size;
}

Aufgrund der Uhrzeit und der fehlenden Testumgebung: Alle Angaben ohne Gewähr ;)

[edit] Die Uhrzeit hat wohl doch zugeschlagen. Hab ma eben die beiden male, bei denen ich long statt size geschrieben hab ausgebessert :bae:

[edit2] und das .size() (was natülich schwachsinn is) hab ich gleich in das .length() umgewandelt. Ich poste echt nix mehr nach 12 und scho gar net im angetrunkenen Zustand :oops:
 

PELLE

Bekanntes Mitglied
ui so wenig code?? ich dachte das wäre die hammer methode :p ich kanns mir aus zeitgründen erst in ner woche testen... bis dann
 

PELLE

Bekanntes Mitglied
hab das mal in eclipse gepasted und die beiden long müssen wohl eher size heißen oder willst du bytes in einem datentyp speichern;-) :p

Code:
 public long dirSize(File dir)
      {

    	   File[] files = dir.listFiles();
    	   long size = 0;
    	   for (File file : files) {
    	      if (file.isDirectory()) {
    	         size += dirSize(file);
    	      }
    	      else {
    	         size += file.size(); <----diese size "methode ist undefined for the type file
    	      }
    	   }
    	   return size;
      }
 

Einwegdose

Aktives Mitglied
Code:
size += file.length();  // Fügt zu size die Größe der Datei in Bytes an
...
double mbsize;
mbsize = size/1024/1024;
 

byte

Top Contributor
Code:
int size;
try {
  URLConnection conn = file.toURL().openConnection();
  size = conn.getContentLength();
  conn.getInputStream().close();
} catch(Exception e) {
  e.printStackTrace();
}
 

Einwegdose

Aktives Mitglied
Sieht doch nur umständlicher aus, oder ?
Er hat ja sowieso die Files in nem Array, da brauch man ja nur jeweils die .length() aufrufen :>
Bei mir sehen die Werte damit auf jeden Fall realistisch aus ...
 

The_S

Top Contributor
PELLE hat gesagt.:
hab das mal in eclipse gepasted und die beiden long müssen wohl eher size heißen oder willst du bytes in einem datentyp speichern;-) :p

öhm ... joa ... ich verweise auf die Uhrzeit :wink: *ausbesser* und das mit dem size, was eigentlich als length gedacht war habsch auch gleich mit ausgebessert. Jetzt dürfte es aber gehen :###

[edit] joa, funktioniert so :D
 

PELLE

Bekanntes Mitglied
ok hier mal mein ganzer code...

Veränderte Methode von Hobbit im Mega-Rausch:

Code:
 public double dirSize(File dir)
      {
    	   double mbsize;
    	    
    	   File[] files = dir.listFiles();
    	   double size = 0;
    	   for (File file : files)
    	   {
    	      if (file.isDirectory())
    	      {
    	         size += dirSize(file);
    	      }
    	      else
    	      {
    	    	  size += file.length();
    	      }
    	   }
    	   mbsize = size/1024/1024;
    	   return mbsize;
      }

Methode von mir die oberste verzeichnisse eines Laufwerks als string in eine JComboBox einliest zum bequemen auswählen:

Code:
      public void SourceDirectoryCBEinlesen()
      {
          File path = new File(SettingsPanel.sourceDirDefaultTF.getText());
          FileFilter filefilter = new FileFilter()
          {
             public boolean accept(File file)
             {
                return file.isDirectory();
             }
          };
          File[] zipfiles = path.listFiles(filefilter);
          for(int i = 0 ; i < zipfiles.length ; i++)
          {
            SourceDirectoryCB.addItem(zipfiles[i].getName()); 
            
            double a =  *****dirSize*****(path.getAbsolutePath());  <---- das ist das dirSize in der fehlermeldung
            String dirMB = String.valueOf(a);         
            homepageTF.setText(dirMB);
          }        
          
      }


*****
Severity and Description Path Resource Location Creation Time Id
The method dirSize(File) in the type MainWindow.RePanel is not applicable for the arguments (String) i MainWindow.java line 339 1152355189000 1166

ic weißt getAbsolutePath gibt string zurück und dirSize will eine variable vom typ File nur wie übergebe ich dirSize ein Unterverzeichnis von typ file wenn path zB. L : / ist und unterverzeichns das L : /unterverzeichnis?


obiger code: in dem moment wo die methode SourceDirectoryCBEinlesen aufgerufen wird , werden alle verzeichnisse auf dem bestimmten laufwerk x eingelesen in die JCBox und die größe des verzeichnisses wird im textfield homepageTF ausgegeben!

obwohl keine zeit doch damit beschäftigt... :p
 

The_S

Top Contributor
1. was willst du jetzt genau machen? Einen Laufwerkbuchstaben und einen Pfad zusammenfügen? Warum verwendest du keinen JFileChooser?

2. Zur richtigen Berechnung der MegaByte bitte folgenden Artiekl mit Augenmerk auf den Unterschied zwischen MebiByte und MegaByte legen

http://de.wikipedia.org/wiki/Speicherkapazität

und nein, dass ist kein Fehler im Wiki, sondern offiziell so. Daher kommt auch die Differenz von einer Festplatte (z. B. 80GigaByte) und die Anzeige unter Windows (ein bisschen weniger, grob geschätzt 76 GibiByte).
 

PELLE

Bekanntes Mitglied
zu 1. verzeichnis in JCBox einlesen und größe ermitteln will kein filechooser nehmen


zu 2. das mit den 1024/1024 kommt net von mir hab ich so gedankenlos übernommen...
 

The_S

Top Contributor
ich verstehs immer noch net (restalkohol???) Wenn du die Größe von L:\ haben willst rufst du dirSize so auf

Code:
long size = dirSize(new File("L:\\");

und wenn du die Größe von L:\ unterverzeichnis haben möchtest rufst du dirSize so auf

Code:
long size = dirSize(new File(laufwerk + unterverzeichnis));

musst halt darauf achten, dass laufwerk + unterverzeichnis zusammen z. B. sowas ergen C:/Daten/Downloads o. ä.
 

Einwegdose

Aktives Mitglied
Dass die Festplattenhersteller fälschlicherweise für 1KB nur 1000 statt 1024 Bytes nehmen, ändert doch nichts daran, dass 1024 die richtige Zahl ist, oder?

Daher: size / 1024 ==> KB / 1024 ==> MB
 

The_S

Top Contributor
hm, nein. Die Festplattenhersteller nehmen die richtige Zahl, weil Kilo = 1.000, Mega 1.000.000, usw. usf. ist und nicht 1024. 1024 kommt durch das binär-System (Zweiersystem), daher hat man irgendwann mal vor ein paar Jahren um Missverständnisse vorzubeugen KibiByte, MebiByte, GibiByte, ... eingeführt. das bi steht für binary also 2-er System. Beachtet nur keine Sau und ist dem größten Teil der Leute unbekannt. Da ich mich aber schulisch vor einiger Zeit damit beschäftigen musste, bin ich auch auf die für mich zuerst sehr verwirrende Information gestosen.

[edit] also KB und MB usw. ist eigentlich schon richtig, nur steht das nicht für MegaByte oder KiloByte sondern für MebiByte bzw. KibiByte. Die offizielle Abkürzung für KiloByte wäre kB also Anfangsbuchstabe klein. Ist im Endeffekt nur ne formelle Sache.
 

Einwegdose

Aktives Mitglied
Aha Interessant. Ich habe diese Begriffe (Kibi... , Mebi..., ...) noch nie gehört, und das obwohl ich auf ner Schule mit Fachrichtung Informatik gehe :)

Aber ich denke durch 1024 zu teilen dürfte nichtsdesdotrotz in Ordnung sein (jedenfalls ist die angezeigte Größe genauso wie im Explorer).
 

The_S

Top Contributor
joa, wollte nur ein bisschen kniebohrerisch sein ;) .

Hatte wie gesagt auch lang nichts davon gehört.
 

PELLE

Bekanntes Mitglied
Hobbit_Im_Blutrausch hat gesagt.:
ich verstehs immer noch net (restalkohol???) Wenn du die Größe von L:\ haben willst rufst du dirSize so auf

Code:
long size = dirSize(new File("L:\\");

und wenn du die Größe von L:\ unterverzeichnis haben möchtest rufst du dirSize so auf

Code:
long size = dirSize(new File(laufwerk + unterverzeichnis));

musst halt darauf achten, dass laufwerk + unterverzeichnis zusammen z. B. sowas ergen C:/Daten/Downloads o. ä.

das 2.wollte ich danke hobbit das geht mit sicherheit :) melde mich nächste woche dann :lol:
 

PELLE

Bekanntes Mitglied
haha sheisse ja obwohl ich lernen sollte :p


hm wenn ich dateienen in L:/bla habe gibt er mir die größe aus der datei in megabyte aber die größe vom verzeichnis L:/bla/bla1 ist immer 0 ich denke weil sich da keine datei befindet sondern nur wiederum verzeichnisse mit unterverzeichnissen , lege ich aber in das verzeichnis ne 8 mb datei meldet mir java auch braw 8 mb als size. ich denke deine methode geht nicht entweder in die unterverzeichnisse rekursiv oder sie findet nur dateien??? :bahnhof:
 

Brainiac

Bekanntes Mitglied
Code:
public double dirSize(File dir) 
      { 
          double mbsize; 
           
          File[] files = dir.listFiles(); 
          double size = 0; 
          for (File file : files) 
          { 
             if (file.isDirectory()) 
             { 
                size += dirSize(file);  //hier erfolgt der rekusrsive aufruf für Directorys sollte also gehen
             } 
             else 
             { 
                size += file.length(); 
             } 
          } 
          mbsize = size/1024/1024; 
          return mbsize; 
      }
 

The_S

Top Contributor
1. siehe Brainiac's Erklärung bzw. kommentar
2. habsch mein komplettes C:\ Laufwerk damit ausgelesen, und ich glaub net, dass da 13 GB allein in C selbst ohne Unterodner liegen ;)
 

PELLE

Bekanntes Mitglied
ok ich sehe das isDir usw. werds mir jetzt aber wirklich nächsten freitag anschauen;-)
 

The_S

Top Contributor
jo, ich erwarte nach ein paar Einheiten schlaf deine antwort ...

btw: bist du eigentlich immer on, wenn ich auch on bin? Du beschadest mich doch heimlich ... gebs zu :autsch: :bae:
 

PELLE

Bekanntes Mitglied
haha ok ich bin java süchtig geworden ^^

long a = dirSize(new File("K : //Natalie"));

ich bekomme 3300 mb von java, das sind aber nur die dateien in Natalie verzeichnis, doch die verzeichnisse in natalie/ werden nicht summiert zu den files die in K : //Natalie liegen? komisch...
 

The_S

Top Contributor
joa, ich kann dir sagen woran das liegt, weil derjenige, der hier meine Methode um die MBs erweitert hat gepfuscht hat. Du addierst hier nämlich bei jedem unterordner mb (die behandelt werden wie bytes) mit bytes und erstellst daraus dann nochmal die mb. Von daher haste viel weniger. Wie wärs wenn du meine Methode ohne MB nimmst? Dann sollte es gehen. Kannst ja noch ne 2. Methode bauen, mit der du dann deren ergebnis in MB umrechnest und zurück gibst. Hab in meinem 1. post alle suff-Fehler ausgebessert, kannst sie also 1 zu 1 übernehmen.
 

PELLE

Bekanntes Mitglied
ok danke dir, werd ich machen;-)

explorer im windows: (68.243.492.173 Bytes)
java: 68243492173

na das kommt doch hin :applaus: :applaus: :toll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
D Größe der Zahlenkombinationen eines Arrays begrenzen Allgemeine Java-Themen 3
L Größe eines Objekts im Arbeitsspeicher Allgemeine Java-Themen 1
data89 Die Größe eines Strings in Byte berechnen? Allgemeine Java-Themen 12
L unterschiedliche Größe beim serialisieren eines Objektes! Allgemeine Java-Themen 6
H Größe eines Bildes ändern und Bild speichern Allgemeine Java-Themen 11
H Größe eines Schriftzeichens ermitteln Allgemeine Java-Themen 2
J Größe einer CD ermitteln Allgemeine Java-Themen 10
D Integer-Array variabler Größe mit Zahlen befüllen (Schleifen) Allgemeine Java-Themen 0
N Kombinationen beliebiger Größe berechnen Allgemeine Java-Themen 1
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
C Ein Array mit der Größe von 1 KB erstellen Allgemeine Java-Themen 3
M ZipOutputStream gleiche Datei andere Größe? Allgemeine Java-Themen 0
M Array "Größe" anpassen Allgemeine Java-Themen 2
V Files mit Umlauten ergeben keine Größe Allgemeine Java-Themen 9
E ArrayList mit unbekannter Größe Allgemeine Java-Themen 8
F String in feste Größe zerlegen Allgemeine Java-Themen 11
F JFreeChart Größe anpassen Allgemeine Java-Themen 8
Z Position/Größe von Windows-Fenstern ermitteln Allgemeine Java-Themen 12
B JScrollPane und JPanel: Scrollen nur nach Größe des JPanels Allgemeine Java-Themen 2
W Größe des eingebauten Arbeitsspeichers auslesen Allgemeine Java-Themen 13
Developer_X Java3D-Ball größe angeben Allgemeine Java-Themen 12
reibi Größe Array aus bytes Allgemeine Java-Themen 14
G ändernde größe des GrindBagL Allgemeine Java-Themen 2
G itext größe von image Allgemeine Java-Themen 2
S array von unbekannter größe Allgemeine Java-Themen 2
T Größe eine Variablen in Bytes? Allgemeine Java-Themen 22
C Größe von einem File Allgemeine Java-Themen 9
D JFrame vergrößert nicht auf die gewünschte Größe Allgemeine Java-Themen 2
S Bild Größe verändern Allgemeine Java-Themen 2
G String Array Größe begrenzt? Allgemeine Java-Themen 4
B ArrayList mit Größe initialisieren Allgemeine Java-Themen 16
P Maximale Größe einer Klasse Allgemeine Java-Themen 9
G Image in der Größe ändern Allgemeine Java-Themen 2
S Swing - Problem mit Fenster-/Komponenten-Größe Allgemeine Java-Themen 3
R Größe der JRE anpassen Allgemeine Java-Themen 18
G http maximale transfer größe? Allgemeine Java-Themen 3
M Datein einlesen und in feste Größe aufsplitten Allgemeine Java-Themen 2
J Größe von 2D-Arrays Allgemeine Java-Themen 3
E JPEG Datei Größe und Qualität ändern (für Thumbnails) Allgemeine Java-Themen 4
thE_29 Größe bzw. Zeilen einer Datei Allgemeine Java-Themen 4
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
M Array Rang eines Elements Allgemeine Java-Themen 4
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
H Textposition eines gedrehten Textes verschieben Allgemeine Java-Themen 8
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
S Ausfuehrung eines Programms aufzeichnen..? Allgemeine Java-Themen 4
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Vorbereitung eines Praktikums Allgemeine Java-Themen 4
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
M Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers Allgemeine Java-Themen 1
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
H Rename eines Projekts Allgemeine Java-Themen 1
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
Meeresgott Erste Schritte Sourcetree - Git | Suchen eines Commits Allgemeine Java-Themen 2
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
DaCrazyJavaExpert OOP Ansätze und Tipps zum Porgrammieren eines Taschenrechners Allgemeine Java-Themen 25
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
I Verbindung eines Java-Plugins mit Webserver Allgemeine Java-Themen 3
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
B Spalten eines 2d-Arrays Allgemeine Java-Themen 2
M Rechenprogramm eines wissenschaftlichen Taschenrechners Allgemeine Java-Themen 4
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
E Typüberprüfung eines chars Allgemeine Java-Themen 5
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
H Datentypen Typ eines Arrays überprüfen Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben