# Datei Filter inkl. Unterverzeichnisse



## toto1975 (19. Jul 2010)

Hallo Forum,

nach langen bastelln und lesen habe ich nun endlich einen einfachen Datei Filter erstellen können der mir alle Dateien mit der Endung .JPG in einen Ordner (hier: c:\Users\torsten\Pictures\) ausgibt. Allerdings habe ich jetzt noch 2 große Probleme:

1. Wie kann ich alle Dateien anzeigen die in dem Unterordner von c:\Users\torsten\Pictures\ liegen?

2. Wie bekomme ich die Dateien mit in den Filter wo die Endung .jpg also klein geschrieben ist?

Hier mal mein (von 2 Themen hier zusammengestellter) Code


```
import java.io.File;
	import java.io.FilenameFilter;
	 
	public class Filter {

	 
		public static void main(String... _) {
	    	String Verzeichnis;
	    	Verzeichnis = "c:\\Users\\torsten\\Pictures\\";
	        File directory = new File(Verzeichnis);
	        for (String fileName : directory.list(new FileNameFilter(".JPG"))) {
	            System.out.println("Der Pfad der Datei ist " +Verzeichnis + fileName);
	        }
	    }
	 
	    static final class FileNameFilter implements FilenameFilter {
	 
	        private String filter;
	 
	        public FileNameFilter(String filter) {
	            this.filter = filter;
	        }
	 
	        @Override
	        public boolean accept(File dir, String name) {
	            if (name.contains(filter)) {
	                return true;
	            }
	            return false;
	        }
	    }
	}
```

Danke schon jetzt für jeden Tipp 

schönen Abend noch und Gruß
Toto1975


----------



## eRaaaa (19. Jul 2010)

1. nicht nur Dateien erlauben sondern auch Verzeichnisse und dann eben dieses auch nochmal durchsuchen
2. benutze endsWith anstelle von contains (nur am Rande) und mache vorher name.toUppercase()!


----------



## nrg (19. Jul 2010)

toto1975 hat gesagt.:


> 1. Wie kann ich alle Dateien anzeigen die in dem Unterordner von c:\Users\torsten\Pictures\ liegen?


rekursiv durcharbeiten. hab ich jetzt aber kein beispiel da, bin müde und hasse rekursionen  (würde das dann aber direkt ohne FileFilter lösen)



toto1975 hat gesagt.:


> 2. Wie bekomme ich die Dateien mit in den Filter wo die Endung .jpg also klein geschrieben ist?




```
public boolean accept(File dir, String name) {
        if (name.endsWith(filter.toLowerCase()) || name.endsWith(filter.toUpperCase())) {
            return true;
        }
        return false;
    }
```

könntest auch mit equalsIgnoreCase o.ä. arbeiten.

edit: ok era war schneller . er schreibt dir bestimmt auch eine schöne rekursion  (ist denke auch iterativ lösbar). gn8


----------



## nrg (20. Jul 2010)

ok. doch noch on . könntest es z.b. so machen:

```
public static void main(String[] args) {
		List<File> list = getAllFiles( new File( "D:\\Eigene Dateien\\Eigene Bilder" ), ".jpg" );
		for ( File f : list )
			System.out.println( f.getAbsolutePath() );
	}
	
	public static List<File> getAllFiles( File path, String extension ) {
		List<File> ret = new ArrayList<File>();
		File[] files = path.listFiles();
		for ( File f : files ) {
			if ( f.isDirectory() ) {
				ret.addAll( getAllFiles( f, extension ) );
			} else {
				String name = f.getName();
				if ( name.endsWith( extension.toLowerCase() ) || name.endsWith( extension.toUpperCase() ) ) {
					ret.add( f );
				}
			}
		}
		return ret;
 	}
```


----------

