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: import org.apache.commons.io.IOCase;
023:
024: /**
025: * Filters filenames for a certain name.
026: * <p>
027: * For example, to print all files and directories in the
028: * current directory whose name is <code>Test</code>:
029: *
030: * <pre>
031: * File dir = new File(".");
032: * String[] files = dir.list( new NameFileFilter("Test") );
033: * for ( int i = 0; i < files.length; i++ ) {
034: * System.out.println(files[i]);
035: * }
036: * </pre>
037: *
038: * @since Commons IO 1.0
039: * @version $Revision: 471628 $ $Date: 2006-11-06 05:06:45 +0100 (Mo, 06 Nov 2006) $
040: *
041: * @author Stephen Colebourne
042: * @author Federico Barbieri
043: * @author Serge Knystautas
044: * @author Peter Donald
045: */
046: public class NameFileFilter extends AbstractFileFilter {
047:
048: /** The filenames to search for */
049: private String[] names;
050: /** Whether the comparison is case sensitive. */
051: private IOCase caseSensitivity;
052:
053: /**
054: * Constructs a new case-sensitive name file filter for a single name.
055: *
056: * @param name the name to allow, must not be null
057: * @throws IllegalArgumentException if the name is null
058: */
059: public NameFileFilter(String name) {
060: this (name, null);
061: }
062:
063: /**
064: * Construct a new name file filter specifying case-sensitivity.
065: *
066: * @param name the name to allow, must not be null
067: * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
068: * @throws IllegalArgumentException if the name is null
069: */
070: public NameFileFilter(String name, IOCase caseSensitivity) {
071: if (name == null) {
072: throw new IllegalArgumentException(
073: "The wildcard must not be null");
074: }
075: this .names = new String[] { name };
076: this .caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE
077: : caseSensitivity);
078: }
079:
080: /**
081: * Constructs a new case-sensitive name file filter for an array of names.
082: * <p>
083: * The array is not cloned, so could be changed after constructing the
084: * instance. This would be inadvisable however.
085: *
086: * @param names the names to allow, must not be null
087: * @throws IllegalArgumentException if the names array is null
088: */
089: public NameFileFilter(String[] names) {
090: this (names, null);
091: }
092:
093: /**
094: * Constructs a new name file filter for an array of names specifying case-sensitivity.
095: * <p>
096: * The array is not cloned, so could be changed after constructing the
097: * instance. This would be inadvisable however.
098: *
099: * @param names the names to allow, must not be null
100: * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
101: * @throws IllegalArgumentException if the names array is null
102: */
103: public NameFileFilter(String[] names, IOCase caseSensitivity) {
104: if (names == null) {
105: throw new IllegalArgumentException(
106: "The array of names must not be null");
107: }
108: this .names = names;
109: this .caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE
110: : caseSensitivity);
111: }
112:
113: /**
114: * Constructs a new case-sensitive name file filter for a list of names.
115: *
116: * @param names the names to allow, must not be null
117: * @throws IllegalArgumentException if the name list is null
118: * @throws ClassCastException if the list does not contain Strings
119: */
120: public NameFileFilter(List names) {
121: this (names, null);
122: }
123:
124: /**
125: * Constructs a new name file filter for a list of names specifying case-sensitivity.
126: *
127: * @param names the names to allow, must not be null
128: * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
129: * @throws IllegalArgumentException if the name list is null
130: * @throws ClassCastException if the list does not contain Strings
131: */
132: public NameFileFilter(List names, IOCase caseSensitivity) {
133: if (names == null) {
134: throw new IllegalArgumentException(
135: "The list of names must not be null");
136: }
137: this .names = (String[]) names.toArray(new String[names.size()]);
138: this .caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE
139: : caseSensitivity);
140: }
141:
142: //-----------------------------------------------------------------------
143: /**
144: * Checks to see if the filename matches.
145: *
146: * @param file the File to check
147: * @return true if the filename matches
148: */
149: public boolean accept(File file) {
150: String name = file.getName();
151: for (int i = 0; i < this .names.length; i++) {
152: if (caseSensitivity.checkEquals(name, names[i])) {
153: return true;
154: }
155: }
156: return false;
157: }
158:
159: /**
160: * Checks to see if the filename matches.
161: *
162: * @param file the File directory
163: * @param name the filename
164: * @return true if the filename matches
165: */
166: public boolean accept(File file, String name) {
167: for (int i = 0; i < names.length; i++) {
168: if (caseSensitivity.checkEquals(name, names[i])) {
169: return true;
170: }
171: }
172: return false;
173: }
174:
175: }
|