FileFilter

andreas2000

Mitglied
Hallo, ich habe folgendes Problem, ich will einen FileFilter erstellen, der nur Files mit den Endungen gif, jpg und bmp aus einem Verzeichnis anzeigt. Sollte eigentlich ganz einfach sein, nur mein Beispiel unten funktioniert nicht. Es funktioniert nur die isDirectory() "Filterung", aber dort werden alle Einträge akzeptiert, wenn ich sie weglasse, stehen keine Einträge drin.
Kann mir jemand helfen?

class PicFileFilter implements FilenameFilter
{ public boolean accept( File f, String s)
{return f.isDirectory() ||f.getName().toLowerCase().endsWith(".jpg") || f.getName().toLowerCase().endsWith(".gif") ||
f.getName().toLowerCase().endsWith(".bmp");
}
}
 
andreas2000 hat gesagt.:
Hallo, ich habe folgendes Problem, ich will einen FileFilter erstellen, der nur Files mit den Endungen gif, jpg und bmp aus einem Verzeichnis anzeigt. Sollte eigentlich ganz einfach sein, nur mein Beispiel unten funktioniert nicht. Es funktioniert nur die isDirectory() "Filterung", aber dort werden alle Einträge akzeptiert, wenn ich sie weglasse, stehen keine Einträge drin.
Kann mir jemand helfen?

class PicFileFilter implements FilenameFilter
{ public boolean accept( File f, String s)
{return f.isDirectory() ||f.getName().toLowerCase().endsWith(".jpg") || f.getName().toLowerCase().endsWith(".gif") ||
f.getName().toLowerCase().endsWith(".bmp");
}
}
Ich rate nur mal, hast du das ganze mal mit
Code:
return f.isDirectory() ||s..toLowerCase().endsWith(".jpg")....
versucht?

mfg elmato

p.s. bitte in zukunft die codetags benutzen..
 
Halli und hallo,

habe hier was nettes, was ich mal for ein paar Jahren gebastelt hatte weil ich ein ähnliches Problem hatte und nach etwas algemeinem strebte.

Code:
package de.cmk.util;

import java.io.*;
import java.util.*;
import javax.swing.filechooser.*;
/**
 * <p>Title: Mein Werkzeugkasten</p>
 *
 * @author Malte Kempff
 * @version 1.0
 */

public class ExtentionFileFilter extends    javax.swing.filechooser.FileFilter
                                 implements java.io.FileFilter
                                           ,DirInclusionModes
{
    List    m_extentions; // mit '.'
    String  m_description;
    int     m_dirInclusion = _ACCEPT_ALL_DIRS;
    boolean m_ignoreCase   = true;

    /**
     *
     * @param extention sollte mit "." angeben werden (String)
     * @param description Hinweis für einen FileChooser
     */
    public ExtentionFileFilter(String extention, String description)
    {
        m_extentions = new ArrayList();
        m_extentions.add(extention);
        m_description = description;
    }

    public ExtentionFileFilter(List extentions, String description)
    {
        m_extentions = extentions;
        m_description = description;
    }

    public void setIgnoreCase(boolean ignoreCase)
    {
        m_ignoreCase = ignoreCase;
    }

    public boolean accept(File f)
    {
        String fName = f.getName();
        boolean accepted = false;

        try
        {
            String ext = fName.substring(fName.lastIndexOf("."));

            if (m_ignoreCase)
            {
                for (int i = 0; i<m_extentions.size()&&!accepted; i++)
                {
                    accepted = ext.equalsIgnoreCase((String)m_extentions.get(i));
                }
            }
            else
            {
                accepted = m_extentions.contains(ext);
            }

        }
        catch (StringIndexOutOfBoundsException ex)
        {
        }

        switch (m_dirInclusion)
        {
        case _ACCEPT_ALL_DIRS:
            accepted = accepted||f.isDirectory();
            break;
        case _ACCEPT_DIRS_ALSO:
            break;
        case _ACCEPT_NO_DIRS:
            accepted = accepted&&(!f.isDirectory());
            break;
        case _ACCEPT_ONLY_DIRS:
            accepted = accepted&&f.isDirectory();
            break;

        default:
            throw new IllegalArgumentException("unbekannter Direktoryinclusionsmodus:"+m_dirInclusion);

        }

        return accepted;
    } // end of accept(File)

    public void setDirInclusionMode(int mode)
    {
        m_dirInclusion = mode;
    }

    public int getDirInclusionMode()
    {
        return m_dirInclusion;
    }

    public String getDescription()
    {
        return m_description;
    }

    public String getFirstAcceptableExtention()
    {
        return (String)m_extentions.get(0);
    }

    public String[] getExtentions()
    {
        return (String[])m_extentions.toArray(new String[1]);
    }
} // end of class ExtentionFileFilter
Dazu noch das Interface :-)
Code:
package de.cmk.util;
/**
 * <p>Title: DirInclusionModes</p>
 * <p>Description: Modus der bestimmt of beim Filtern eines Verzeichnisses auch
 * Unterverzeichnisse gelten sollen und wenn ja in welcher Form</p>
 *
 * @author Malte Kempff
 * @version 1.0
 * @see de.cmk.util.FileUtils
 * @see de.cmk.util.ExtentionFileFilter
 */

public interface DirInclusionModes
{
    final static public int _ACCEPT_ALL_DIRS  = 0;  // grundsätzlich alle Directories
    final static public int _ACCEPT_DIRS_ALSO = 1;  // Directories mit gegebenen Extentions
    final static public int _ACCEPT_NO_DIRS   = 2;  // keine Directories
    final static public int _ACCEPT_ONLY_DIRS = 3;  // nur Directories mit gegebenen Extentions
}

viel Spaß damit

Takidoso
 
Zurück