Welcome to the Java Programming Forums


The professional, friendly Java community. 21,500 members and growing!


The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.


>> REGISTER NOW TO START POSTING


Members have full access to the forums. Advertisements are removed for registered users.

  • Java Tip Aug 4, 2010 - How to use File Filters

    Introduction

    File filters are an easy check to see if a file meets some specific criteria. Generally, these are used to limit the available list of files to open when the user is shown a file chooser dialog (JFileChooser). While there is no limit to see if a file is to be displayed (it could even be random), the most common kind of filter is to filter by the file extension. In this tip, I'll go through the basics of creating your own file filters and how to use them with your JFileChooser.

    Difficulty: Easy-Medium. I'm assuming you have some experience with the Java language syntax, but extensive knowledge is not necessary. I will only discuss portions of JFileChooser that pertain to the file filters feature.

    Creating the File Filter

    To create your own file filter, all you need to do is extend the FileFilter class and implement the two abstract methods accept() and getDescription().

    public class TextFileFilter extends FileFilter
    {
         public boolean accept(File f)
        {
            if(f.isDirectory())
            {
                return true;
            }
            return f.getName().endsWith(".txt");
        }
     
        public String getDescription()
        {
            return "Text files (*.txt)";
        }
    }

    public class RandomFileFilter extends JFileFilter
    {
         public boolean accept(File f)
        {
            return math.random() > 0.5;
        }
     
        public String getDescription()
        {
            return "Random files and directories";
        }
    }

    The accept() method

    This method takes in a file, then using whatever logic you want to put in, determines if the file is to be displayed in the JFileChooser file list. Generally, you'll want to keep the check fairly simple because this method is called on every file in the current directory to see if it's going to be displayed in the list or not.

    Note: The file passed is not necessarily guaranteed to be an actual file, it could be a directory. If you want the user to be able to see the directory so they can navigate through them, you must return true if the file is indeed a directory.

    The getDescription() method

    This method is called by the JFileChooser to get the description of the file filter that is currently being used. Basically you can return whatever string you want. Note that while you can return empty or even null strings, it is strongly advised that you don't.

    Using the filters

    To use the file filter, you must first instantiate it and then add it to the list of choosable file filters for your JFileChooser object. If you want the JFileChooser to have a certain file filter active, use the setFileFilter() method (note: this method will add the file filter to the choosable file filters list if it's not already there).

    JFileChooser chooser = new JFileChooser();
    chooser.addChoosableFileFilter(new TextFileFilter());
    chooser.setFileFilter(new RandomFileFilter());

    The above code will add the text file filter first in the list, then it will add the rich text file filter and set that as the active filter.

    The "accept all" file filter

    There's a default file filter that accepts all files and directories. You can enable/disable choosability of this filter using the setAcceptAllFileFilterUsed() method. You can also get the filter if you wish to set the accept all file filter as the filter you want to use.

    chooser.setAcceptAllFileFilterUsed(true); // we can select the accept all file filter
    chooser.setFileFilter(chooser.getAcceptAllFileFilter()); // set the active file filter to teh accept all file filter

    Removing choosable file filters

    If you decide you don't want the user to be able to use a certain file filter anymore, you can remove it using the removeChoosableFileFilter() method.

    chooser.removeChoosableFileFilter(myFilter); // returns true if myFilter was removed, false otherwise

    Conclusion

    For more information on JFileChooser and FileFilters, see How to Use File Choosers
    This article was originally published in forum thread: Java Tip Aug 4, 2010 - How to use File Filters started by helloworld922 View original post