/*
 * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

package javax.swing.filechooser;

import java.io.File;
import java.util.Locale;

An implementation of FileFilter that filters using a specified set of extensions. The extension for a file is the portion of the file name after the last ".". Files whose name does not contain a "." have no file name extension. File name extension comparisons are case insensitive.

The following example creates a FileNameExtensionFilter that will show jpg files:

FileFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg");
JFileChooser fileChooser = ...;
fileChooser.addChoosableFileFilter(filter);
See Also:
Since:1.6
/** * An implementation of {@code FileFilter} that filters using a * specified set of extensions. The extension for a file is the * portion of the file name after the last ".". Files whose name does * not contain a "." have no file name extension. File name extension * comparisons are case insensitive. * <p> * The following example creates a * {@code FileNameExtensionFilter} that will show {@code jpg} files: * <pre> * FileFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg"); * JFileChooser fileChooser = ...; * fileChooser.addChoosableFileFilter(filter); * </pre> * * @see FileFilter * @see javax.swing.JFileChooser#setFileFilter * @see javax.swing.JFileChooser#addChoosableFileFilter * @see javax.swing.JFileChooser#getFileFilter * * @since 1.6 */
public final class FileNameExtensionFilter extends FileFilter { // Description of this filter. private final String description; // Known extensions. private final String[] extensions; // Cached ext private final String[] lowerCaseExtensions;
Creates a FileNameExtensionFilter with the specified description and file name extensions. The returned FileNameExtensionFilter will accept all directories and any file with a file name extension contained in extensions.
Params:
  • description – textual description for the filter, may be null
  • extensions – the accepted file name extensions
Throws:
See Also:
/** * Creates a {@code FileNameExtensionFilter} with the specified * description and file name extensions. The returned {@code * FileNameExtensionFilter} will accept all directories and any * file with a file name extension contained in {@code extensions}. * * @param description textual description for the filter, may be * {@code null} * @param extensions the accepted file name extensions * @throws IllegalArgumentException if extensions is {@code null}, empty, * contains {@code null}, or contains an empty string * @see #accept */
public FileNameExtensionFilter(String description, String... extensions) { if (extensions == null || extensions.length == 0) { throw new IllegalArgumentException( "Extensions must be non-null and not empty"); } this.description = description; this.extensions = new String[extensions.length]; this.lowerCaseExtensions = new String[extensions.length]; for (int i = 0; i < extensions.length; i++) { if (extensions[i] == null || extensions[i].length() == 0) { throw new IllegalArgumentException( "Each extension must be non-null and not empty"); } this.extensions[i] = extensions[i]; lowerCaseExtensions[i] = extensions[i].toLowerCase(Locale.ENGLISH); } }
Tests the specified file, returning true if the file is accepted, false otherwise. True is returned if the extension matches one of the file name extensions of this FileFilter, or the file is a directory.
Params:
  • f – the File to test
Returns:true if the file is to be accepted, false otherwise
/** * Tests the specified file, returning true if the file is * accepted, false otherwise. True is returned if the extension * matches one of the file name extensions of this {@code * FileFilter}, or the file is a directory. * * @param f the {@code File} to test * @return true if the file is to be accepted, false otherwise */
public boolean accept(File f) { if (f != null) { if (f.isDirectory()) { return true; } // NOTE: we tested implementations using Maps, binary search // on a sorted list and this implementation. All implementations // provided roughly the same speed, most likely because of // overhead associated with java.io.File. Therefor we've stuck // with the simple lightweight approach. String fileName = f.getName(); int i = fileName.lastIndexOf('.'); if (i > 0 && i < fileName.length() - 1) { String desiredExtension = fileName.substring(i+1). toLowerCase(Locale.ENGLISH); for (String extension : lowerCaseExtensions) { if (desiredExtension.equals(extension)) { return true; } } } } return false; }
The description of this filter. For example: "JPG and GIF Images."
Returns:the description of this filter
/** * The description of this filter. For example: "JPG and GIF Images." * * @return the description of this filter */
public String getDescription() { return description; }
Returns the set of file name extensions files are tested against.
Returns:the set of file name extensions files are tested against
/** * Returns the set of file name extensions files are tested against. * * @return the set of file name extensions files are tested against */
public String[] getExtensions() { String[] result = new String[extensions.length]; System.arraycopy(extensions, 0, result, 0, extensions.length); return result; }
Returns a string representation of the FileNameExtensionFilter. This method is intended to be used for debugging purposes, and the content and format of the returned string may vary between implementations.
Returns:a string representation of this FileNameExtensionFilter
/** * Returns a string representation of the {@code FileNameExtensionFilter}. * This method is intended to be used for debugging purposes, * and the content and format of the returned string may vary * between implementations. * * @return a string representation of this {@code FileNameExtensionFilter} */
public String toString() { return super.toString() + "[description=" + getDescription() + " extensions=" + java.util.Arrays.asList(getExtensions()) + "]"; } }