001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.commons.io.filefilter;
018:
019: import java.io.File;
020: import java.util.List;
021:
022: /**
023: * Filters files based on the suffix (what the filename ends with).
024: * This is used in retrieving all the files of a particular type.
025: * <p>
026: * For example, to retrieve and print all <code>*.java</code> files
027: * in the current directory:
028: *
029: * <pre>
030: * File dir = new File(".");
031: * String[] files = dir.list( new SuffixFileFilter(".java") );
032: * for (int i = 0; i < files.length; i++) {
033: * System.out.println(files[i]);
034: * }
035: * </pre>
036: *
037: * @since Commons IO 1.0
038: * @version $Revision: 471628 $ $Date: 2006-11-06 05:06:45 +0100 (Mo, 06 Nov 2006) $
039: *
040: * @author Stephen Colebourne
041: * @author Federico Barbieri
042: * @author Serge Knystautas
043: * @author Peter Donald
044: */
045: public class SuffixFileFilter extends AbstractFileFilter {
046:
047: /** The filename suffixes to search for */
048: private String[] suffixes;
049:
050: /**
051: * Constructs a new Suffix file filter for a single extension.
052: *
053: * @param suffix the suffix to allow, must not be null
054: * @throws IllegalArgumentException if the suffix is null
055: */
056: public SuffixFileFilter(String suffix) {
057: if (suffix == null) {
058: throw new IllegalArgumentException(
059: "The suffix must not be null");
060: }
061: this .suffixes = new String[] { suffix };
062: }
063:
064: /**
065: * Constructs a new Suffix file filter for an array of suffixs.
066: * <p>
067: * The array is not cloned, so could be changed after constructing the
068: * instance. This would be inadvisable however.
069: *
070: * @param suffixes the suffixes to allow, must not be null
071: * @throws IllegalArgumentException if the suffix array is null
072: */
073: public SuffixFileFilter(String[] suffixes) {
074: if (suffixes == null) {
075: throw new IllegalArgumentException(
076: "The array of suffixes must not be null");
077: }
078: this .suffixes = suffixes;
079: }
080:
081: /**
082: * Constructs a new Suffix file filter for a list of suffixes.
083: *
084: * @param suffixes the suffixes to allow, must not be null
085: * @throws IllegalArgumentException if the suffix list is null
086: * @throws ClassCastException if the list does not contain Strings
087: */
088: public SuffixFileFilter(List suffixes) {
089: if (suffixes == null) {
090: throw new IllegalArgumentException(
091: "The list of suffixes must not be null");
092: }
093: this .suffixes = (String[]) suffixes.toArray(new String[suffixes
094: .size()]);
095: }
096:
097: /**
098: * Checks to see if the filename ends with the suffix.
099: *
100: * @param file the File to check
101: * @return true if the filename ends with one of our suffixes
102: */
103: public boolean accept(File file) {
104: String name = file.getName();
105: for (int i = 0; i < this .suffixes.length; i++) {
106: if (name.endsWith(this .suffixes[i])) {
107: return true;
108: }
109: }
110: return false;
111: }
112:
113: /**
114: * Checks to see if the filename ends with the suffix.
115: *
116: * @param file the File directory
117: * @param name the filename
118: * @return true if the filename ends with one of our suffixes
119: */
120: public boolean accept(File file, String name) {
121: for (int i = 0; i < this .suffixes.length; i++) {
122: if (name.endsWith(this .suffixes[i])) {
123: return true;
124: }
125: }
126: return false;
127: }
128:
129: }
|