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.io.FileFilter; 21 import java.io.FilenameFilter; 22 import java.util.Date; 23 24 /** 25 * Useful utilities for working with file filters. It provides access to all 26 * file filter implementations in this package so you don't have to import 27 * every class you use. 28 * 29 * @since Commons IO 1.0 30 * @version $Id: FileFilterUtils.java 609286 2008-01-06 10:01:26Z scolebourne $ 31 * 32 * @author Stephen Colebourne 33 * @author Jeremias Maerki 34 * @author Masato Tezuka 35 * @author Rahul Akolkar 36 */ 37 public class FileFilterUtils { 38 39 /** 40 * FileFilterUtils is not normally instantiated. 41 */ FileFilterUtils()42 public FileFilterUtils() { 43 } 44 45 //----------------------------------------------------------------------- 46 /** 47 * Returns a filter that returns true if the filename starts with the specified text. 48 * 49 * @param prefix the filename prefix 50 * @return a prefix checking filter 51 */ prefixFileFilter(String prefix)52 public static IOFileFilter prefixFileFilter(String prefix) { 53 return new PrefixFileFilter(prefix); 54 } 55 56 /** 57 * Returns a filter that returns true if the filename ends with the specified text. 58 * 59 * @param suffix the filename suffix 60 * @return a suffix checking filter 61 */ suffixFileFilter(String suffix)62 public static IOFileFilter suffixFileFilter(String suffix) { 63 return new SuffixFileFilter(suffix); 64 } 65 66 /** 67 * Returns a filter that returns true if the filename matches the specified text. 68 * 69 * @param name the filename 70 * @return a name checking filter 71 */ nameFileFilter(String name)72 public static IOFileFilter nameFileFilter(String name) { 73 return new NameFileFilter(name); 74 } 75 76 /** 77 * Returns a filter that checks if the file is a directory. 78 * 79 * @return file filter that accepts only directories and not files 80 */ directoryFileFilter()81 public static IOFileFilter directoryFileFilter() { 82 return DirectoryFileFilter.DIRECTORY; 83 } 84 85 /** 86 * Returns a filter that checks if the file is a file (and not a directory). 87 * 88 * @return file filter that accepts only files and not directories 89 */ fileFileFilter()90 public static IOFileFilter fileFileFilter() { 91 return FileFileFilter.FILE; 92 } 93 94 //----------------------------------------------------------------------- 95 /** 96 * Returns a filter that ANDs the two specified filters. 97 * 98 * @param filter1 the first filter 99 * @param filter2 the second filter 100 * @return a filter that ANDs the two specified filters 101 */ andFileFilter(IOFileFilter filter1, IOFileFilter filter2)102 public static IOFileFilter andFileFilter(IOFileFilter filter1, IOFileFilter filter2) { 103 return new AndFileFilter(filter1, filter2); 104 } 105 106 /** 107 * Returns a filter that ORs the two specified filters. 108 * 109 * @param filter1 the first filter 110 * @param filter2 the second filter 111 * @return a filter that ORs the two specified filters 112 */ orFileFilter(IOFileFilter filter1, IOFileFilter filter2)113 public static IOFileFilter orFileFilter(IOFileFilter filter1, IOFileFilter filter2) { 114 return new OrFileFilter(filter1, filter2); 115 } 116 117 /** 118 * Returns a filter that NOTs the specified filter. 119 * 120 * @param filter the filter to invert 121 * @return a filter that NOTs the specified filter 122 */ notFileFilter(IOFileFilter filter)123 public static IOFileFilter notFileFilter(IOFileFilter filter) { 124 return new NotFileFilter(filter); 125 } 126 127 //----------------------------------------------------------------------- 128 /** 129 * Returns a filter that always returns true. 130 * 131 * @return a true filter 132 */ trueFileFilter()133 public static IOFileFilter trueFileFilter() { 134 return TrueFileFilter.TRUE; 135 } 136 137 /** 138 * Returns a filter that always returns false. 139 * 140 * @return a false filter 141 */ falseFileFilter()142 public static IOFileFilter falseFileFilter() { 143 return FalseFileFilter.FALSE; 144 } 145 146 //----------------------------------------------------------------------- 147 /** 148 * Returns an <code>IOFileFilter</code> that wraps the 149 * <code>FileFilter</code> instance. 150 * 151 * @param filter the filter to be wrapped 152 * @return a new filter that implements IOFileFilter 153 */ asFileFilter(FileFilter filter)154 public static IOFileFilter asFileFilter(FileFilter filter) { 155 return new DelegateFileFilter(filter); 156 } 157 158 /** 159 * Returns an <code>IOFileFilter</code> that wraps the 160 * <code>FilenameFilter</code> instance. 161 * 162 * @param filter the filter to be wrapped 163 * @return a new filter that implements IOFileFilter 164 */ asFileFilter(FilenameFilter filter)165 public static IOFileFilter asFileFilter(FilenameFilter filter) { 166 return new DelegateFileFilter(filter); 167 } 168 169 //----------------------------------------------------------------------- 170 /** 171 * Returns a filter that returns true if the file was last modified after 172 * the specified cutoff time. 173 * 174 * @param cutoff the time threshold 175 * @return an appropriately configured age file filter 176 * @since Commons IO 1.2 177 */ ageFileFilter(long cutoff)178 public static IOFileFilter ageFileFilter(long cutoff) { 179 return new AgeFileFilter(cutoff); 180 } 181 182 /** 183 * Returns a filter that filters files based on a cutoff time. 184 * 185 * @param cutoff the time threshold 186 * @param acceptOlder if true, older files get accepted, if false, newer 187 * @return an appropriately configured age file filter 188 * @since Commons IO 1.2 189 */ ageFileFilter(long cutoff, boolean acceptOlder)190 public static IOFileFilter ageFileFilter(long cutoff, boolean acceptOlder) { 191 return new AgeFileFilter(cutoff, acceptOlder); 192 } 193 194 /** 195 * Returns a filter that returns true if the file was last modified after 196 * the specified cutoff date. 197 * 198 * @param cutoffDate the time threshold 199 * @return an appropriately configured age file filter 200 * @since Commons IO 1.2 201 */ ageFileFilter(Date cutoffDate)202 public static IOFileFilter ageFileFilter(Date cutoffDate) { 203 return new AgeFileFilter(cutoffDate); 204 } 205 206 /** 207 * Returns a filter that filters files based on a cutoff date. 208 * 209 * @param cutoffDate the time threshold 210 * @param acceptOlder if true, older files get accepted, if false, newer 211 * @return an appropriately configured age file filter 212 * @since Commons IO 1.2 213 */ ageFileFilter(Date cutoffDate, boolean acceptOlder)214 public static IOFileFilter ageFileFilter(Date cutoffDate, boolean acceptOlder) { 215 return new AgeFileFilter(cutoffDate, acceptOlder); 216 } 217 218 /** 219 * Returns a filter that returns true if the file was last modified after 220 * the specified reference file. 221 * 222 * @param cutoffReference the file whose last modification 223 * time is usesd as the threshold age of the files 224 * @return an appropriately configured age file filter 225 * @since Commons IO 1.2 226 */ ageFileFilter(File cutoffReference)227 public static IOFileFilter ageFileFilter(File cutoffReference) { 228 return new AgeFileFilter(cutoffReference); 229 } 230 231 /** 232 * Returns a filter that filters files based on a cutoff reference file. 233 * 234 * @param cutoffReference the file whose last modification 235 * time is usesd as the threshold age of the files 236 * @param acceptOlder if true, older files get accepted, if false, newer 237 * @return an appropriately configured age file filter 238 * @since Commons IO 1.2 239 */ ageFileFilter(File cutoffReference, boolean acceptOlder)240 public static IOFileFilter ageFileFilter(File cutoffReference, boolean acceptOlder) { 241 return new AgeFileFilter(cutoffReference, acceptOlder); 242 } 243 244 //----------------------------------------------------------------------- 245 /** 246 * Returns a filter that returns true if the file is bigger than a certain size. 247 * 248 * @param threshold the file size threshold 249 * @return an appropriately configured SizeFileFilter 250 * @since Commons IO 1.2 251 */ sizeFileFilter(long threshold)252 public static IOFileFilter sizeFileFilter(long threshold) { 253 return new SizeFileFilter(threshold); 254 } 255 256 /** 257 * Returns a filter that filters based on file size. 258 * 259 * @param threshold the file size threshold 260 * @param acceptLarger if true, larger files get accepted, if false, smaller 261 * @return an appropriately configured SizeFileFilter 262 * @since Commons IO 1.2 263 */ sizeFileFilter(long threshold, boolean acceptLarger)264 public static IOFileFilter sizeFileFilter(long threshold, boolean acceptLarger) { 265 return new SizeFileFilter(threshold, acceptLarger); 266 } 267 268 /** 269 * Returns a filter that accepts files whose size is >= minimum size 270 * and <= maximum size. 271 * 272 * @param minSizeInclusive the minimum file size (inclusive) 273 * @param maxSizeInclusive the maximum file size (inclusive) 274 * @return an appropriately configured IOFileFilter 275 * @since Commons IO 1.3 276 */ sizeRangeFileFilter(long minSizeInclusive, long maxSizeInclusive )277 public static IOFileFilter sizeRangeFileFilter(long minSizeInclusive, long maxSizeInclusive ) { 278 IOFileFilter minimumFilter = new SizeFileFilter(minSizeInclusive, true); 279 IOFileFilter maximumFilter = new SizeFileFilter(maxSizeInclusive + 1L, false); 280 return new AndFileFilter(minimumFilter, maximumFilter); 281 } 282 283 //----------------------------------------------------------------------- 284 /* Constructed on demand and then cached */ 285 private static IOFileFilter cvsFilter; 286 287 /* Constructed on demand and then cached */ 288 private static IOFileFilter svnFilter; 289 290 /** 291 * Decorates a filter to make it ignore CVS directories. 292 * Passing in <code>null</code> will return a filter that accepts everything 293 * except CVS directories. 294 * 295 * @param filter the filter to decorate, null means an unrestricted filter 296 * @return the decorated filter, never null 297 * @since Commons IO 1.1 (method existed but had bug in 1.0) 298 */ makeCVSAware(IOFileFilter filter)299 public static IOFileFilter makeCVSAware(IOFileFilter filter) { 300 if (cvsFilter == null) { 301 cvsFilter = notFileFilter( 302 andFileFilter(directoryFileFilter(), nameFileFilter("CVS"))); 303 } 304 if (filter == null) { 305 return cvsFilter; 306 } else { 307 return andFileFilter(filter, cvsFilter); 308 } 309 } 310 311 /** 312 * Decorates a filter to make it ignore SVN directories. 313 * Passing in <code>null</code> will return a filter that accepts everything 314 * except SVN directories. 315 * 316 * @param filter the filter to decorate, null means an unrestricted filter 317 * @return the decorated filter, never null 318 * @since Commons IO 1.1 319 */ makeSVNAware(IOFileFilter filter)320 public static IOFileFilter makeSVNAware(IOFileFilter filter) { 321 if (svnFilter == null) { 322 svnFilter = notFileFilter( 323 andFileFilter(directoryFileFilter(), nameFileFilter(".svn"))); 324 } 325 if (filter == null) { 326 return svnFilter; 327 } else { 328 return andFileFilter(filter, svnFilter); 329 } 330 } 331 332 //----------------------------------------------------------------------- 333 /** 334 * Decorates a filter so that it only applies to directories and not to files. 335 * 336 * @param filter the filter to decorate, null means an unrestricted filter 337 * @return the decorated filter, never null 338 * @since Commons IO 1.3 339 */ makeDirectoryOnly(IOFileFilter filter)340 public static IOFileFilter makeDirectoryOnly(IOFileFilter filter) { 341 if (filter == null) { 342 return DirectoryFileFilter.DIRECTORY; 343 } 344 return new AndFileFilter(DirectoryFileFilter.DIRECTORY, filter); 345 } 346 347 /** 348 * Decorates a filter so that it only applies to files and not to directories. 349 * 350 * @param filter the filter to decorate, null means an unrestricted filter 351 * @return the decorated filter, never null 352 * @since Commons IO 1.3 353 */ makeFileOnly(IOFileFilter filter)354 public static IOFileFilter makeFileOnly(IOFileFilter filter) { 355 if (filter == null) { 356 return FileFileFilter.FILE; 357 } 358 return new AndFileFilter(FileFileFilter.FILE, filter); 359 } 360 361 } 362