DateiSuche - Aufbau der SuFu

subn0de

Mitglied
Hallo,

ich brauche eine flexible Suchfunktion für Dateien. Die Frage ist, wie ich das am besten realisiere, ich habe gerade die org.apache.commons.io gefunden, welche einige Filterfunktionen mitbringt. Diese zu verknüpfen ist aber ein wenig umständlich: per AndFileFilter kann man 2 weitere Filter hinzufügen. Da ich aber nicht alle Werte mitgebe, zB nur die Mindestgrösse und das zu durchsuchende Verzeichnis, suche ich eine Möglichkeit das ganze Filtertrum erst runtime zu erstellen, hat jemand eine Idee wie man das machen könnte? Oder soll ich die Dateiliste dann von einer SuFu "minSize" zur weiteren bearbeitung an SuFu"maxSize" schicken etc?

Java:
import org.apache.commons.io.FileUtils;

public static void searchFiles(File root, 
                                                    String[] contains,    
                                                    Long sizeMin, 
                                                    Long sizeMax, 
                                                    String[] suffix, 
                                                    String[] prefix,
                                                    String[] containsNot, 
                                                    Boolean hidden, 
                                                    Boolean recursive) 
    {
        
        WildcardFileFilter containsFilter=new WildcardFileFilter(contains);
        WildcardFileFilter containsNotFilter = new WildcardFileFilter(containsNot);
        SizeFileFilter sizeMinFilter = new SizeFileFilter(sizeMin);
        SizeFileFilter sizeMaxFilter = new SizeFileFilter(sizeMax);
        SuffixFileFilter  extensionFilter = new SuffixFileFilter(suffix);
        HiddenFileFilter hiddenFilter =null;
        
        try {
            Collection files = FileUtils.listFiles(root , FileFilterUtils.andFileFilter(
                    FileFilterUtils.andFileFilter(
                            containsFilter, containsNotFilter), FileFilterUtils.andFileFilter(
                                    sizeMinFilter,FileFilterUtils.andFileFilter(
                                            sizeMaxFilter, extensionFilter))),
                                            TrueFileFilter.TRUE);
            
            for (Iterator iterator = files.iterator(); iterator.hasNext();) {
                File file = (File) iterator.next();
                System.out.println("File = " + file.getAbsolutePath());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
 
Zuletzt bearbeitet:
hmm, die Frage ist nicht ganz klar,
dir ist selber aufgefallen dass man Filter beliebig kombinieren kann, also entweder macht das der Aufrufer und übergibt den richtigen Filter als Parameter oder du übergibst wie aktuell viele Werte, von denen dann nicht alle gesetzt sind,
dann musst du dir jeweils ignorieren-Werte überlegen (für size z.B. negative Zahlen, -1, Objekte null) und if/else einbauen,
gehts darum? ist doch relativ normales bekanntes Programmieren
 
Sorry, habe
Code:
AndFileFilter.setFileFilters(java.util.List<IOFileFilter> fileFilters)
ganz übersehen 😳
 

Zurück
Oben