1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.commons.io.filefilter; 18 19 import java.io.File; 20 import java.util.List; 21 22 import org.apache.commons.io.IOCase; 23 24 /** 25 * Filters filenames for a certain name. 26 * <p> 27 * For example, to print all files and directories in the 28 * current directory whose name is <code>Test</code>: 29 * 30 * <pre> 31 * File dir = new File("."); 32 * String[] files = dir.list( new NameFileFilter("Test") ); 33 * for ( int i = 0; i < files.length; i++ ) { 34 * System.out.println(files[i]); 35 * } 36 * </pre> 37 * 38 * @since Commons IO 1.0 39 * @version $Revision: 471628 $ $Date: 2006-11-06 05:06:45 +0100 (Mo, 06 Nov 2006) $ 40 * 41 * @author Stephen Colebourne 42 * @author Federico Barbieri 43 * @author Serge Knystautas 44 * @author Peter Donald 45 */ 46 public class NameFileFilter extends AbstractFileFilter { 47 48 /** The filenames to search for */ 49 private String[] names; 50 /** Whether the comparison is case sensitive. */ 51 private IOCase caseSensitivity; 52 53 /** 54 * Constructs a new case-sensitive name file filter for a single name. 55 * 56 * @param name the name to allow, must not be null 57 * @throws IllegalArgumentException if the name is null 58 */ 59 public NameFileFilter(String name) { 60 this(name, null); 61 } 62 63 /** 64 * Construct a new name file filter specifying case-sensitivity. 65 * 66 * @param name the name to allow, must not be null 67 * @param caseSensitivity how to handle case sensitivity, null means case-sensitive 68 * @throws IllegalArgumentException if the name is null 69 */ 70 public NameFileFilter(String name, IOCase caseSensitivity) { 71 if (name == null) { 72 throw new IllegalArgumentException("The wildcard must not be null"); 73 } 74 this.names = new String[] {name}; 75 this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity); 76 } 77 78 /** 79 * Constructs a new case-sensitive name file filter for an array of names. 80 * <p> 81 * The array is not cloned, so could be changed after constructing the 82 * instance. This would be inadvisable however. 83 * 84 * @param names the names to allow, must not be null 85 * @throws IllegalArgumentException if the names array is null 86 */ 87 public NameFileFilter(String[] names) { 88 this(names, null); 89 } 90 91 /** 92 * Constructs a new name file filter for an array of names specifying case-sensitivity. 93 * <p> 94 * The array is not cloned, so could be changed after constructing the 95 * instance. This would be inadvisable however. 96 * 97 * @param names the names to allow, must not be null 98 * @param caseSensitivity how to handle case sensitivity, null means case-sensitive 99 * @throws IllegalArgumentException if the names array is null 100 */ 101 public NameFileFilter(String[] names, IOCase caseSensitivity) { 102 if (names == null) { 103 throw new IllegalArgumentException("The array of names must not be null"); 104 } 105 this.names = names; 106 this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity); 107 } 108 109 /** 110 * Constructs a new case-sensitive name file filter for a list of names. 111 * 112 * @param names the names to allow, must not be null 113 * @throws IllegalArgumentException if the name list is null 114 * @throws ClassCastException if the list does not contain Strings 115 */ 116 public NameFileFilter(List names) { 117 this(names, null); 118 } 119 120 /** 121 * Constructs a new name file filter for a list of names specifying case-sensitivity. 122 * 123 * @param names the names to allow, must not be null 124 * @param caseSensitivity how to handle case sensitivity, null means case-sensitive 125 * @throws IllegalArgumentException if the name list is null 126 * @throws ClassCastException if the list does not contain Strings 127 */ 128 public NameFileFilter(List names, IOCase caseSensitivity) { 129 if (names == null) { 130 throw new IllegalArgumentException("The list of names must not be null"); 131 } 132 this.names = (String[]) names.toArray(new String[names.size()]); 133 this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity); 134 } 135 136 //----------------------------------------------------------------------- 137 /** 138 * Checks to see if the filename matches. 139 * 140 * @param file the File to check 141 * @return true if the filename matches 142 */ 143 public boolean accept(File file) { 144 String name = file.getName(); 145 for (int i = 0; i < this.names.length; i++) { 146 if (caseSensitivity.checkEquals(name, names[i])) { 147 return true; 148 } 149 } 150 return false; 151 } 152 153 /** 154 * Checks to see if the filename matches. 155 * 156 * @param file the File directory 157 * @param name the filename 158 * @return true if the filename matches 159 */ 160 public boolean accept(File file, String name) { 161 for (int i = 0; i < names.length; i++) { 162 if (caseSensitivity.checkEquals(name, names[i])) { 163 return true; 164 } 165 } 166 return false; 167 } 168 169 }