362 lines
13 KiB
Java
362 lines
13 KiB
Java
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership.
|
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
* (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package org.apache.commons.io.filefilter;
|
|
|
|
import java.io.File;
|
|
import java.io.FileFilter;
|
|
import java.io.FilenameFilter;
|
|
import java.util.Date;
|
|
|
|
/**
|
|
* Useful utilities for working with file filters. It provides access to all
|
|
* file filter implementations in this package so you don't have to import
|
|
* every class you use.
|
|
*
|
|
* @since Commons IO 1.0
|
|
* @version $Id: FileFilterUtils.java 609286 2008-01-06 10:01:26Z scolebourne $
|
|
*
|
|
* @author Stephen Colebourne
|
|
* @author Jeremias Maerki
|
|
* @author Masato Tezuka
|
|
* @author Rahul Akolkar
|
|
*/
|
|
public class FileFilterUtils {
|
|
|
|
/**
|
|
* FileFilterUtils is not normally instantiated.
|
|
*/
|
|
public FileFilterUtils() {
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
/**
|
|
* Returns a filter that returns true if the filename starts with the specified text.
|
|
*
|
|
* @param prefix the filename prefix
|
|
* @return a prefix checking filter
|
|
*/
|
|
public static IOFileFilter prefixFileFilter(String prefix) {
|
|
return new PrefixFileFilter(prefix);
|
|
}
|
|
|
|
/**
|
|
* Returns a filter that returns true if the filename ends with the specified text.
|
|
*
|
|
* @param suffix the filename suffix
|
|
* @return a suffix checking filter
|
|
*/
|
|
public static IOFileFilter suffixFileFilter(String suffix) {
|
|
return new SuffixFileFilter(suffix);
|
|
}
|
|
|
|
/**
|
|
* Returns a filter that returns true if the filename matches the specified text.
|
|
*
|
|
* @param name the filename
|
|
* @return a name checking filter
|
|
*/
|
|
public static IOFileFilter nameFileFilter(String name) {
|
|
return new NameFileFilter(name);
|
|
}
|
|
|
|
/**
|
|
* Returns a filter that checks if the file is a directory.
|
|
*
|
|
* @return file filter that accepts only directories and not files
|
|
*/
|
|
public static IOFileFilter directoryFileFilter() {
|
|
return DirectoryFileFilter.DIRECTORY;
|
|
}
|
|
|
|
/**
|
|
* Returns a filter that checks if the file is a file (and not a directory).
|
|
*
|
|
* @return file filter that accepts only files and not directories
|
|
*/
|
|
public static IOFileFilter fileFileFilter() {
|
|
return FileFileFilter.FILE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
/**
|
|
* Returns a filter that ANDs the two specified filters.
|
|
*
|
|
* @param filter1 the first filter
|
|
* @param filter2 the second filter
|
|
* @return a filter that ANDs the two specified filters
|
|
*/
|
|
public static IOFileFilter andFileFilter(IOFileFilter filter1, IOFileFilter filter2) {
|
|
return new AndFileFilter(filter1, filter2);
|
|
}
|
|
|
|
/**
|
|
* Returns a filter that ORs the two specified filters.
|
|
*
|
|
* @param filter1 the first filter
|
|
* @param filter2 the second filter
|
|
* @return a filter that ORs the two specified filters
|
|
*/
|
|
public static IOFileFilter orFileFilter(IOFileFilter filter1, IOFileFilter filter2) {
|
|
return new OrFileFilter(filter1, filter2);
|
|
}
|
|
|
|
/**
|
|
* Returns a filter that NOTs the specified filter.
|
|
*
|
|
* @param filter the filter to invert
|
|
* @return a filter that NOTs the specified filter
|
|
*/
|
|
public static IOFileFilter notFileFilter(IOFileFilter filter) {
|
|
return new NotFileFilter(filter);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
/**
|
|
* Returns a filter that always returns true.
|
|
*
|
|
* @return a true filter
|
|
*/
|
|
public static IOFileFilter trueFileFilter() {
|
|
return TrueFileFilter.TRUE;
|
|
}
|
|
|
|
/**
|
|
* Returns a filter that always returns false.
|
|
*
|
|
* @return a false filter
|
|
*/
|
|
public static IOFileFilter falseFileFilter() {
|
|
return FalseFileFilter.FALSE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
/**
|
|
* Returns an <code>IOFileFilter</code> that wraps the
|
|
* <code>FileFilter</code> instance.
|
|
*
|
|
* @param filter the filter to be wrapped
|
|
* @return a new filter that implements IOFileFilter
|
|
*/
|
|
public static IOFileFilter asFileFilter(FileFilter filter) {
|
|
return new DelegateFileFilter(filter);
|
|
}
|
|
|
|
/**
|
|
* Returns an <code>IOFileFilter</code> that wraps the
|
|
* <code>FilenameFilter</code> instance.
|
|
*
|
|
* @param filter the filter to be wrapped
|
|
* @return a new filter that implements IOFileFilter
|
|
*/
|
|
public static IOFileFilter asFileFilter(FilenameFilter filter) {
|
|
return new DelegateFileFilter(filter);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
/**
|
|
* Returns a filter that returns true if the file was last modified after
|
|
* the specified cutoff time.
|
|
*
|
|
* @param cutoff the time threshold
|
|
* @return an appropriately configured age file filter
|
|
* @since Commons IO 1.2
|
|
*/
|
|
public static IOFileFilter ageFileFilter(long cutoff) {
|
|
return new AgeFileFilter(cutoff);
|
|
}
|
|
|
|
/**
|
|
* Returns a filter that filters files based on a cutoff time.
|
|
*
|
|
* @param cutoff the time threshold
|
|
* @param acceptOlder if true, older files get accepted, if false, newer
|
|
* @return an appropriately configured age file filter
|
|
* @since Commons IO 1.2
|
|
*/
|
|
public static IOFileFilter ageFileFilter(long cutoff, boolean acceptOlder) {
|
|
return new AgeFileFilter(cutoff, acceptOlder);
|
|
}
|
|
|
|
/**
|
|
* Returns a filter that returns true if the file was last modified after
|
|
* the specified cutoff date.
|
|
*
|
|
* @param cutoffDate the time threshold
|
|
* @return an appropriately configured age file filter
|
|
* @since Commons IO 1.2
|
|
*/
|
|
public static IOFileFilter ageFileFilter(Date cutoffDate) {
|
|
return new AgeFileFilter(cutoffDate);
|
|
}
|
|
|
|
/**
|
|
* Returns a filter that filters files based on a cutoff date.
|
|
*
|
|
* @param cutoffDate the time threshold
|
|
* @param acceptOlder if true, older files get accepted, if false, newer
|
|
* @return an appropriately configured age file filter
|
|
* @since Commons IO 1.2
|
|
*/
|
|
public static IOFileFilter ageFileFilter(Date cutoffDate, boolean acceptOlder) {
|
|
return new AgeFileFilter(cutoffDate, acceptOlder);
|
|
}
|
|
|
|
/**
|
|
* Returns a filter that returns true if the file was last modified after
|
|
* the specified reference file.
|
|
*
|
|
* @param cutoffReference the file whose last modification
|
|
* time is usesd as the threshold age of the files
|
|
* @return an appropriately configured age file filter
|
|
* @since Commons IO 1.2
|
|
*/
|
|
public static IOFileFilter ageFileFilter(File cutoffReference) {
|
|
return new AgeFileFilter(cutoffReference);
|
|
}
|
|
|
|
/**
|
|
* Returns a filter that filters files based on a cutoff reference file.
|
|
*
|
|
* @param cutoffReference the file whose last modification
|
|
* time is usesd as the threshold age of the files
|
|
* @param acceptOlder if true, older files get accepted, if false, newer
|
|
* @return an appropriately configured age file filter
|
|
* @since Commons IO 1.2
|
|
*/
|
|
public static IOFileFilter ageFileFilter(File cutoffReference, boolean acceptOlder) {
|
|
return new AgeFileFilter(cutoffReference, acceptOlder);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
/**
|
|
* Returns a filter that returns true if the file is bigger than a certain size.
|
|
*
|
|
* @param threshold the file size threshold
|
|
* @return an appropriately configured SizeFileFilter
|
|
* @since Commons IO 1.2
|
|
*/
|
|
public static IOFileFilter sizeFileFilter(long threshold) {
|
|
return new SizeFileFilter(threshold);
|
|
}
|
|
|
|
/**
|
|
* Returns a filter that filters based on file size.
|
|
*
|
|
* @param threshold the file size threshold
|
|
* @param acceptLarger if true, larger files get accepted, if false, smaller
|
|
* @return an appropriately configured SizeFileFilter
|
|
* @since Commons IO 1.2
|
|
*/
|
|
public static IOFileFilter sizeFileFilter(long threshold, boolean acceptLarger) {
|
|
return new SizeFileFilter(threshold, acceptLarger);
|
|
}
|
|
|
|
/**
|
|
* Returns a filter that accepts files whose size is >= minimum size
|
|
* and <= maximum size.
|
|
*
|
|
* @param minSizeInclusive the minimum file size (inclusive)
|
|
* @param maxSizeInclusive the maximum file size (inclusive)
|
|
* @return an appropriately configured IOFileFilter
|
|
* @since Commons IO 1.3
|
|
*/
|
|
public static IOFileFilter sizeRangeFileFilter(long minSizeInclusive, long maxSizeInclusive ) {
|
|
IOFileFilter minimumFilter = new SizeFileFilter(minSizeInclusive, true);
|
|
IOFileFilter maximumFilter = new SizeFileFilter(maxSizeInclusive + 1L, false);
|
|
return new AndFileFilter(minimumFilter, maximumFilter);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
/* Constructed on demand and then cached */
|
|
private static IOFileFilter cvsFilter;
|
|
|
|
/* Constructed on demand and then cached */
|
|
private static IOFileFilter svnFilter;
|
|
|
|
/**
|
|
* Decorates a filter to make it ignore CVS directories.
|
|
* Passing in <code>null</code> will return a filter that accepts everything
|
|
* except CVS directories.
|
|
*
|
|
* @param filter the filter to decorate, null means an unrestricted filter
|
|
* @return the decorated filter, never null
|
|
* @since Commons IO 1.1 (method existed but had bug in 1.0)
|
|
*/
|
|
public static IOFileFilter makeCVSAware(IOFileFilter filter) {
|
|
if (cvsFilter == null) {
|
|
cvsFilter = notFileFilter(
|
|
andFileFilter(directoryFileFilter(), nameFileFilter("CVS")));
|
|
}
|
|
if (filter == null) {
|
|
return cvsFilter;
|
|
} else {
|
|
return andFileFilter(filter, cvsFilter);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Decorates a filter to make it ignore SVN directories.
|
|
* Passing in <code>null</code> will return a filter that accepts everything
|
|
* except SVN directories.
|
|
*
|
|
* @param filter the filter to decorate, null means an unrestricted filter
|
|
* @return the decorated filter, never null
|
|
* @since Commons IO 1.1
|
|
*/
|
|
public static IOFileFilter makeSVNAware(IOFileFilter filter) {
|
|
if (svnFilter == null) {
|
|
svnFilter = notFileFilter(
|
|
andFileFilter(directoryFileFilter(), nameFileFilter(".svn")));
|
|
}
|
|
if (filter == null) {
|
|
return svnFilter;
|
|
} else {
|
|
return andFileFilter(filter, svnFilter);
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
/**
|
|
* Decorates a filter so that it only applies to directories and not to files.
|
|
*
|
|
* @param filter the filter to decorate, null means an unrestricted filter
|
|
* @return the decorated filter, never null
|
|
* @since Commons IO 1.3
|
|
*/
|
|
public static IOFileFilter makeDirectoryOnly(IOFileFilter filter) {
|
|
if (filter == null) {
|
|
return DirectoryFileFilter.DIRECTORY;
|
|
}
|
|
return new AndFileFilter(DirectoryFileFilter.DIRECTORY, filter);
|
|
}
|
|
|
|
/**
|
|
* Decorates a filter so that it only applies to files and not to directories.
|
|
*
|
|
* @param filter the filter to decorate, null means an unrestricted filter
|
|
* @return the decorated filter, never null
|
|
* @since Commons IO 1.3
|
|
*/
|
|
public static IOFileFilter makeFileOnly(IOFileFilter filter) {
|
|
if (filter == null) {
|
|
return FileFileFilter.FILE;
|
|
}
|
|
return new AndFileFilter(FileFileFilter.FILE, filter);
|
|
}
|
|
|
|
}
|