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 filenames for a certain prefix.
024: * <p>
025: * For example, to print all files and directories in the
026: * current directory whose name starts with <code>Test</code>:
027: *
028: * <pre>
029: * File dir = new File(".");
030: * String[] files = dir.list( new PrefixFileFilter("Test") );
031: * for ( int i = 0; i < files.length; i++ ) {
032: * System.out.println(files[i]);
033: * }
034: * </pre>
035: *
036: * @since Commons IO 1.0
037: * @version $Revision: 471628 $ $Date: 2006-11-06 05:06:45 +0100 (Mo, 06 Nov 2006) $
038: *
039: * @author Stephen Colebourne
040: * @author Federico Barbieri
041: * @author Serge Knystautas
042: * @author Peter Donald
043: */
044: public class PrefixFileFilter extends AbstractFileFilter {
045:
046: /** The filename prefixes to search for */
047: private String[] prefixes;
048:
049: /**
050: * Constructs a new Prefix file filter for a single prefix.
051: *
052: * @param prefix the prefix to allow, must not be null
053: * @throws IllegalArgumentException if the prefix is null
054: */
055: public PrefixFileFilter(String prefix) {
056: if (prefix == null) {
057: throw new IllegalArgumentException(
058: "The prefix must not be null");
059: }
060: this .prefixes = new String[] { prefix };
061: }
062:
063: /**
064: * Constructs a new Prefix file filter for any of an array of prefixes.
065: * <p>
066: * The array is not cloned, so could be changed after constructing the
067: * instance. This would be inadvisable however.
068: *
069: * @param prefixes the prefixes to allow, must not be null
070: * @throws IllegalArgumentException if the prefix array is null
071: */
072: public PrefixFileFilter(String[] prefixes) {
073: if (prefixes == null) {
074: throw new IllegalArgumentException(
075: "The array of prefixes must not be null");
076: }
077: this .prefixes = prefixes;
078: }
079:
080: /**
081: * Constructs a new Prefix file filter for a list of prefixes.
082: *
083: * @param prefixes the prefixes to allow, must not be null
084: * @throws IllegalArgumentException if the prefix list is null
085: * @throws ClassCastException if the list does not contain Strings
086: */
087: public PrefixFileFilter(List prefixes) {
088: if (prefixes == null) {
089: throw new IllegalArgumentException(
090: "The list of prefixes must not be null");
091: }
092: this .prefixes = (String[]) prefixes.toArray(new String[prefixes
093: .size()]);
094: }
095:
096: /**
097: * Checks to see if the filename starts with the prefix.
098: *
099: * @param file the File to check
100: * @return true if the filename starts with one of our prefixes
101: */
102: public boolean accept(File file) {
103: String name = file.getName();
104: for (int i = 0; i < this .prefixes.length; i++) {
105: if (name.startsWith(this .prefixes[i])) {
106: return true;
107: }
108: }
109: return false;
110: }
111:
112: /**
113: * Checks to see if the filename starts with the prefix.
114: *
115: * @param file the File directory
116: * @param name the filename
117: * @return true if the filename starts with one of our prefixes
118: */
119: public boolean accept(File file, String name) {
120: for (int i = 0; i < prefixes.length; i++) {
121: if (name.startsWith(prefixes[i])) {
122: return true;
123: }
124: }
125: return false;
126: }
127:
128: }
|