# ordner rekursiv durchsuchen



## erdmulch (10. Apr 2011)

Hallo zusammen,

ich will ein Verzeichnis nach einer bestimmten datei dursuchen
wie muss meine Mainmethode aussehen, dass ich ihr (File dir, String find) übergeben kann?

danke im voraus


```
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;


public class Suchen 
{
	public Suchen (File dir, String find) 
	{

		File[] files = dir.listFiles();
		ArrayList<File> matches = new ArrayList<File> ();
		if (files != null) 
		{
			for (int i = 0; i < files.length; i++) 
			{
				if (files[i].getName().equalsIgnoreCase(find)) 
				{ // überprüft ob der Dateiname mit dem Suchstring
										 // übereinstimmt. Groß-/Kleinschreibung wird
										 // ignoriert.
					matches.add(files[i]);
				}
				if (files[i].isDirectory()) 
				{
					matches.addAll(searchFile(files[i], find)); // fügt der ArrayList die ArrayList mit den
										    // Treffern aus dem Unterordner hinzu
				}
			}
		}
		return;
	}

	private Collection<? extends File> searchFile(File file, String find) {
		// TODO Auto-generated method stub
		return null;
	}
}
```


----------



## Marcinek (10. Apr 2011)

Hi,

ich behaupte, dass wenn deine Methode"Suchen" ebenfalls eine Collection am ende zurückgeben würde , dann könntest du einfach statt der neuen Methode "searchFile" sich selber "rekursiv" aufrufen, dann würdest du bereits am Ziel sein.

Gruß,

Martin


----------



## erdmulch (10. Apr 2011)

was willst du damit sagen?


----------



## Marcinek (10. Apr 2011)

Hi,

also also aus meiner Sicht, hast du alles, was du brauchst.

Du musst nur noch deine eine private Methode unten weg machen und statt dessen wieder suchen aufrufen.

Dann geht das rekursiv runter. Natürlich muss die suchen methode was anderes als void zurückgeben.

Gruß,

Martin


----------



## Java123??? (11. Apr 2011)

"Suchen" ist ein Konstruktor und deshalb wäre es vielleicht besser wenn du den Inhalt vom Konstruktor in eine Methode schreibst und das Ergebnis zurückgibst, dann klappt das auch mit der Rekursion wie Marcinek auch schon geschrieben hat.
z.B. so:

```
public class Suchen 
{
    public File[] such (File dir, String find) 
    {
        File[] files = dir.listFiles();
        ArrayList<File> matches = new ArrayList<File> ();
        if (files != null) 
        {
            for (int i = 0; i < files.length; i++) 
            {
                if (files[i].getName().equalsIgnoreCase(find)) 
                { // überprüft ob der Dateiname mit dem Suchstring
                                         // übereinstimmt. Groß-/Kleinschreibung wird
                                         // ignoriert.
                    matches.add(files[i]);
                }
                if (files[i].isDirectory()) 
                {
                    matches.addAll(such(files[i], find)); // fügt der ArrayList die ArrayList mit den
                                            // Treffern aus dem Unterordner hinzu
                }
            }
        }
        return matches;
    }
```


----------



## kay73 (11. Apr 2011)

Schau mal den DirectoryWalker aus Apache Commons an:
DirectoryWalker (Commons IO 2.0.1 API)

und das Beispiel wie man FIlter benutzt:
DirectoryWalker (Commons IO 2.0.1 API)


----------



## nrg (11. Apr 2011)

dafür kannste auch einfach einen FileFilter nehmen


----------

