Rekursiv-Beispiel; Wer erklärt mir...

Status
Nicht offen für weitere Antworten.
G

Gast LA

Gast
Moin, moin,

ich habe hier im Forum folgenden Code für die rekursive Verzeichnissuche gefunden. Leider habe ich so meine Verständnissprobleme, was die Funktionsweise anbelangt. Ich wäre wirklich dankbar für jede Aufklärung. (Wenn auch nur grob, wäre auch schon prima).THX für jeden comment.

Code:
public class FileFinder { 

   final FileFilter fileFilter; 
   final static FileFilter directoryFilter = new FileFilter() { 
      public boolean accept(File file) { 
         return file.isDirectory(); 
      } 
   }; 

   public FileFinder(final String fileNameMask) { 
      fileFilter = new FileFilter() { 
         public boolean accept(File file) { 
            return file.isFile() && file.getName().matches(fileNameMask); 
         } 
      }; 
   } 

   public Set findFile(File directory) { 
      Set files = new HashSet(); 
      findFile(files, directory); 
      return files; 
   } 

   public void findFile(Set foundFiles, File directory) { 
      /* Search for files */ 
      File[] files = directory.listFiles(fileFilter); 
      if (files.length > 0) { 
         foundFiles.addAll(Arrays.asList(files)); 
      } 

      /* Get the sub directories */ 
      File[] subDirs = directory.listFiles(directoryFilter); 
      for (int dirIndex = 0; dirIndex < subDirs.length; dirIndex++) { 
         findFile(foundFiles, subDirs[dirIndex]); 
      } 
   } 

   public static void main(String[] args) { 
      System.out.println(new FileFinder(".*\\.ini").findFile(new File("C:\\WINNT"))); 
   } 
}
 

thE_29

Top Contributor
also ich verstehs ;)


na schau her, die eigentlich suchfunktion (und speichern ) macht diese hier
Code:
public void findFile(Set foundFiles, File directory) {
      /* Search for files */ //Anfang 1er Abschnitt
      File[] files = directory.listFiles(fileFilter);
      if (files.length > 0) {
         foundFiles.addAll(Arrays.asList(files));
      }  //Ende 1ter Abschnitt

      /* Get the sub directories */ //2ter Abschnitt
      File[] subDirs = directory.listFiles(directoryFilter);
      for (int dirIndex = 0; dirIndex < subDirs.length; dirIndex++) {
         findFile(foundFiles, subDirs[dirIndex]); //1ter Abschnitt
      }
   }

also, im ersten Abschnitt addet er alle gefunden Files, die auf den FileFilter zutreffen in eine Liste, vector, oder sonstwas

im 2ten Abschnitt geht er dann alle SubVerzeichnisse durch

Bsp.:

C:\WINNT\ = aufruf

1ter Durchlauf:
1ter Abschnitt: such in C:\WINN\ alle ini und addet sie
2ter Abschnitt: die for schleife geht solange bis alle SubVerzeichnisse durch sind (also .length())
er geht aber sofort ins 1ter Subverzeichnis was er findet

sagen wir du hast so einen ordner
C:\WINNT\
C:\WINNT\1\
C:\WINNT\1\1
C:\WINNT\2

so geht er folgende reihe in die ordner (kommt halt darauf an, wie das listFiels arbeitet (ob nach ABC oder sonst wie die Ordner zurückliefert)

zuerst in C:\WINNT\ (alle ini s adden)
dann geht er in C:\WINNT\1\ (alle inis adden)
dann in C:\WINNT\1\1\ (alle inis adden) (dann ist dort im 2ten Abschnitt die for schleife aus, weil er keine subverzeichnisse hat, also 1mal ist die Funktion komplett fertig
dann in C:\WINNT\1\ (würde er weiter suche, findet er keine, wieder Funktion fertig)
dann in C:\WINNT\2\ (alle inis adden), dann sucht er subs, findet keine, fertig
dann sucht er in C:\WINNT\ weiter subs, findet keine, fertig -> komplett fertig

hoffe ich habe dir bisi geholfen ;)
 

Manfred

Bekanntes Mitglied
Ich denke, dass dieses Beispiel nicht gerade gut zum verstehen/lernen ist, schau mal in der Suche nach
 
G

Gast LA

Gast
Soweit, so gut. Das hat mir schon prima geholfen. Aber was genau passiert eigentlich hier????????

Code:
final static FileFilter directoryFilter = new FileFilter() {
      public boolean accept(File file) {
         return file.isDirectory();
 

thE_29

Top Contributor
das ist eine anonyme Klasse für den FileFilter fallst du dein Programm so startest
Code:
 System.out.println(new FileFinder().findFile(new File("C:\\WINNT")));

da gibt er dir nur Ordner zurück

return file.isDirectory()

sonst nichts! also irgendwie sinnlos!
 
G

Gast LA

Gast
Also ich hab mittlerweile ein wenig gelesen...

Das ich einen FileFilter brauche, um nur bestimmte Dateien aufzunehmen ist mir klar. Warum das so gemacht wird jedoch nicht.
Code:
public FileFinder(final String fileNameMask) {//constructor
      fileFilter = new FileFilter() {
         public boolean accept(File file) {
            return file.isFile() && file.getName().matches(fileNameMask);
Außerdem ist der Filter casesensitiv. D.h., *.DOC-Dateien werden mit einem *.doc-Filter nicht gefunden. Hab noch keine Lösung, wie ich das umgehen kann.

Im Aufruf steht der Ausdruck ".*\\.doc" als Parameter für den Filter. Warum kann da nicht "*.doc" stehen????????

THX nochmals für jeden Tip
 

bummerland

Top Contributor
Gast LA hat gesagt.:
Außerdem ist der Filter casesensitiv. D.h., *.DOC-Dateien werden mit einem *.doc-Filter nicht gefunden. Hab noch keine Lösung, wie ich das umgehen kann.

Kannst du so umgehen:
Code:
public FileFinder(final String fileNameMask) {//constructor
      fileFilter = new FileFilter() {
         public boolean accept(File file) {
            return file.isFile() && file.getName().toLowerCase().endsWith(".doc");
 

thE_29

Top Contributor
und das .*\\.doc heißt du suchst nach .* und .doc dateien

ist aber nur eine Vermutung, aber so könnt ichs mir erlören!
 
B

bygones

Gast
thE_29 hat gesagt.:
und das .*\\.doc heißt du suchst nach .* und .doc dateien
nein - der reg ausdrick .*\\.doc heißt übersetzt:

Suche alles was irgendwas am Anfang und am Ende .doc hat...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Passwort Brute Force rekursiv Java Basics - Anfänger-Themen 7
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
R0m1lly Kombinationen aus int array rekursiv Java Basics - Anfänger-Themen 2
L Rekursiv gegebenes Passwort herausfinden. Java Basics - Anfänger-Themen 2
P9cman Char Index rekursiv finden Java Basics - Anfänger-Themen 4
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
S Methoden Methodenaufruf rekursiv zählen Java Basics - Anfänger-Themen 4
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
sashady Zahlen rekursiv zerlegen und Ziffern addieren Java Basics - Anfänger-Themen 38
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
H Binominalkoeffizient tail-rekursiv in java darstellen Java Basics - Anfänger-Themen 0
GAZ Tribonacci Folge Rekursiv Java Basics - Anfänger-Themen 11
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
A Ackermmanfunktion rekursiv Java Basics - Anfänger-Themen 4
A Binärbaum rekursiv durchsuchen und Referenz zurückgeben Java Basics - Anfänger-Themen 4
H Rekursiv Methode ausführen bei Kindern Java Basics - Anfänger-Themen 12
G Methode Rekursiv umschreiben Java Basics - Anfänger-Themen 8
L Jede zweite Ziffer entfernen (rekursiv) Java Basics - Anfänger-Themen 6
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
D Pentagonale Nummern in Rekursiv Java Basics - Anfänger-Themen 14
O Enum Array Rekursiv abarbeiten Java Basics - Anfänger-Themen 44
E Weg-Suche-Problem rekursiv Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
E Erste Schritte Potenz Negativ (rekursiv) Java Basics - Anfänger-Themen 2
O Rekursiv aufrufen Java Basics - Anfänger-Themen 2
F In List Rekursiv suchen Java Basics - Anfänger-Themen 12
F Iterativ in Rekursiv Java Basics - Anfänger-Themen 2
S Fibonacci Zahlen rekursiv Java Basics - Anfänger-Themen 1
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
B Fakultätsfunktion Rekursiv Berechnen aber mit Array Java Basics - Anfänger-Themen 10
J Fibonacci -Folge rekursiv berechnen Java Basics - Anfänger-Themen 18
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
kilopack15 Sin(x) rekursiv lösen Java Basics - Anfänger-Themen 17
T Rekursiv Tiefe eines binären Suchbaums ermitteln Java Basics - Anfänger-Themen 22
P Methoden Arrays.AsList kleinste Zahl ausgeben Rekursiv Java Basics - Anfänger-Themen 9
W A hoch N Rekursiv Java Basics - Anfänger-Themen 3
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
M Fibonacci rekursiv mittels Cache Java Basics - Anfänger-Themen 17
E Binärbaum - von rekursiv zu iterativ Java Basics - Anfänger-Themen 10
Y Rekursiv Palindrom herausfinden Java Basics - Anfänger-Themen 5
B Fibonacci Zahlen rekursiv Array Java Basics - Anfänger-Themen 12
M String rekursiv Spiegeln mit Originalwort davor Java Basics - Anfänger-Themen 3
K Türme von Hanoi - Rekursiv. Java Basics - Anfänger-Themen 1
T MergeSort rekursiv programmieren Java Basics - Anfänger-Themen 8
M Zahlenpyramide rekursiv programmieren Java Basics - Anfänger-Themen 7
hello_autumn Potenz selber berechnen, Rekursiv. Java Basics - Anfänger-Themen 6
V Text wüerfeln-Rekursiv Java Basics - Anfänger-Themen 4
J Baum rekursiv durchlaufen Java Basics - Anfänger-Themen 2
D Münzverteilung Möglichkeiten | Rekursiv Java Basics - Anfänger-Themen 3
R Hanoi rekursiv lösen Problem Java Basics - Anfänger-Themen 1
D Rekursiv Kombinationen ausgeben klappt nur bei einer Wiederholung Java Basics - Anfänger-Themen 4
shiroX OOP String rekursiv zurückgeben Java Basics - Anfänger-Themen 6
Z Fibonacci rekursiv meine Erklärung stimmt so? Java Basics - Anfänger-Themen 2
S java rekursiv iterativ hilfee :s Java Basics - Anfänger-Themen 5
E Erste Schritte Pi, rekursiv Java Basics - Anfänger-Themen 6
A Frage Methode ggt Rekursiv Java Basics - Anfänger-Themen 5
E Hanoi-Varianten rekursiv Java Basics - Anfänger-Themen 2
P Hanoi rekursiv zu iterativ umbauen Java Basics - Anfänger-Themen 20
P Mittelwert rekursiv Java Basics - Anfänger-Themen 13
E Integral Rekursiv Java Basics - Anfänger-Themen 15
M MergeSort rekursiv Java Basics - Anfänger-Themen 2
D Ziffer in Zahl Rekursiv Java Basics - Anfänger-Themen 4
B Array rekursiv untersuchen Java Basics - Anfänger-Themen 21
I Rekursiv Java Basics - Anfänger-Themen 13
C Rekursiv Zahlenfolgen berechnen mit zwei Variablen Java Basics - Anfänger-Themen 5
K Rekursiv zu Literal Java Basics - Anfänger-Themen 12
R Verzeichnisse rekursiv nach Dateiduplikaten durchsuchen Java Basics - Anfänger-Themen 5
L File Tree rekursiv Java Basics - Anfänger-Themen 10
W Binomialkoeffizient iterativ/rekursiv Java Basics - Anfänger-Themen 2
X Addition rekursiv ohne Schleife Java Basics - Anfänger-Themen 10
M Sudoku Rekursiv lösen Java Basics - Anfänger-Themen 9
E Datentypen ein java problem rekursiv loesen Java Basics - Anfänger-Themen 2
K indexOf selbst rekursiv definieren Java Basics - Anfänger-Themen 4
M Fibonacci-Linear und Rekursiv Java Basics - Anfänger-Themen 14
J Java Rekursiv vs(zu) Iterativ Hilfe Java Basics - Anfänger-Themen 3
D preOrder, inOrder, postOrder rekursiv zusammensetzen aus String Java Basics - Anfänger-Themen 1
K Binomialkoeffizient rekursiv berechnen Java Basics - Anfänger-Themen 8
J eulersche rekursiv berechnen Java Basics - Anfänger-Themen 6
J Suchbaumeigenschaft rekursiv programmieren Java Basics - Anfänger-Themen 3
T Rekursiv Vokale zählen Java Basics - Anfänger-Themen 19
G Bestimmte Ebene eines Baumes rekursiv ausgeben Java Basics - Anfänger-Themen 49
F Sortieralgorithmus von rekursiv auf iterativ? Java Basics - Anfänger-Themen 21
G Sudoku rekursiv lösen Java Basics - Anfänger-Themen 10
S Stringlänge Rekursiv ermitteln Java Basics - Anfänger-Themen 2
dognose Verzeichnis rekursiv auslesen / beschränkte Apis. Java Basics - Anfänger-Themen 6
0 a hoch b rekursiv - wie stoppen? Java Basics - Anfänger-Themen 3
T Ordnerstrucktur rekursiv auslesen Java Basics - Anfänger-Themen 9
G Rekursiv die größte Zahl eines Arrays Java Basics - Anfänger-Themen 6
G Rekursiv Array Elemente quadrieren Java Basics - Anfänger-Themen 2
N Fibo Zahlen:iterativ,rekursiv Anzahl der Additionen zählen Java Basics - Anfänger-Themen 2
P Permutationen einer Tour rekursiv Java Basics - Anfänger-Themen 4
G Baumstruktur rekursiv durchlaufen Java Basics - Anfänger-Themen 2
B Kürzesten Weg zwischen mehreren Punkten finden (rekursiv) Java Basics - Anfänger-Themen 5
L Kombinationen einer Menge rekursiv berechnen Java Basics - Anfänger-Themen 11
J BinBaum rekursiv ausgeben Java Basics - Anfänger-Themen 9
W Rekursiv Zeichen einfügen Java Basics - Anfänger-Themen 6
M Verzeichnisse rekursiv durchlaufen und dann RegEx Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben