user1730941
user1730941

Reputation:

Filtering filechooser via filename

I learned how to use filter using filefilter.

FileFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg");

But I want to filter my filechooser with files containing certain strings in them like having "sample" in their filenames.

Only files that does have these strings can be chosen and this filter must not be editable. How can I do it?

Upvotes: 4

Views: 757

Answers (1)

user1730941
user1730941

Reputation:

public class ImageFilter extends FileFilter {

    //Accept all directories and all jpeg, jpg files with lossy in its filename.
    public boolean accept(File f) {
        if (f.isDirectory()) {
            return true;
        }

        String extension = Utils.getExtension(f);
        String filename = Utils.getName(f);
        if (extension != null) {
            if ((extension.equals(Utils.jpeg) || extension.equals(Utils.jpg)) && filename.contains("lossy")) {
                    return true;
            } else {
                return false;
            }
        }

        return false;
    }

    //The description of this filter
    public String getDescription() {
        return "Images (Lossy)";
    }
}

and this is my utils class

public class Utils {
    public final static String jpeg = "jpeg";
    public final static String jpg = "jpg";

/*
 * Get the extension of a file.
 */
    public static String getExtension(File f) {
        String ext = null;
        String s = f.getName();
        int i = s.lastIndexOf('.');

        if (i > 0 &&  i < s.length() - 1) {
            ext = s.substring(i+1).toLowerCase();
        }
        return ext;
    }
    public static String getName(File f) {
        String fname = null;
        String s = f.getName();
        int i = s.length() - s.lastIndexOf('.');
        fname = s.substring(0,s.length()-i);

        return fname;
    }

    /** Returns an ImageIcon, or null if the path was invalid. */
    protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = Utils.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }
}

to apply,

fc.addChoosableFileFilter(new ImageFilter());

Upvotes: 2

Related Questions