14ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/* 24ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Licensed to the Apache Software Foundation (ASF) under one or more 34ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * contributor license agreements. See the NOTICE file distributed with 44ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * this work for additional information regarding copyright ownership. 54ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * The ASF licenses this file to You under the Apache License, Version 2.0 64ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * (the "License"); you may not use this file except in compliance with 74ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * the License. You may obtain a copy of the License at 84ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 94ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * http://www.apache.org/licenses/LICENSE-2.0 104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Unless required by applicable law or agreed to in writing, software 124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * distributed under the License is distributed on an "AS IS" BASIS, 134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * See the License for the specific language governing permissions and 154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * limitations under the License. 164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapackage org.apache.commons.io.filefilter; 184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.File; 204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.Serializable; 214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/** 234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Filters files based on size, can filter either smaller files or 244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * files equal to or larger than a given threshold. 254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * <p> 264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * For example, to print all files and directories in the 274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * current directory whose size is greater than 1 MB: 284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * <pre> 304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * File dir = new File("."); 314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * String[] files = dir.list( new SizeFileFilter(1024 * 1024) ); 324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * for ( int i = 0; i < files.length; i++ ) { 334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * System.out.println(files[i]); 344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * } 354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * </pre> 364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @author Rahul Akolkar 384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @version $Id: SizeFileFilter.java 591058 2007-11-01 15:47:05Z niallp $ 394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @since Commons IO 1.2 404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapublic class SizeFileFilter extends AbstractFileFilter implements Serializable { 424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** The size threshold. */ 444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira private final long size; 454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** Whether the files accepted will be larger or smaller. */ 464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira private final boolean acceptLarger; 474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Constructs a new size file filter for files equal to or 504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * larger than a certain size. 514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param size the threshold size of the files 534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @throws IllegalArgumentException if the size is negative 544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public SizeFileFilter(long size) { 564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this(size, true); 574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Constructs a new size file filter for files based on a certain size 614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * threshold. 624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param size the threshold size of the files 644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param acceptLarger if true, files equal to or larger are accepted, 654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * otherwise smaller ones (but not equal to) 664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @throws IllegalArgumentException if the size is negative 674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public SizeFileFilter(long size, boolean acceptLarger) { 694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (size < 0) { 704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira throw new IllegalArgumentException("The size must be non-negative"); 714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.size = size; 734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.acceptLarger = acceptLarger; 744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira //----------------------------------------------------------------------- 774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Checks to see if the size of the file is favorable. 794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * <p> 804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * If size equals threshold and smaller files are required, 814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * file <b>IS NOT</b> selected. 824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * If size equals threshold and larger files are required, 834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * file <b>IS</b> selected. 844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param file the File to check 864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @return true if the filename matches 874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public boolean accept(File file) { 894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira boolean smaller = file.length() < size; 904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return acceptLarger ? !smaller : smaller; 914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Provide a String representaion of this file filter. 954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @return a String representaion 974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public String toString() { 994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira String condition = acceptLarger ? ">=" : "<"; 1004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return super.toString() + "(" + condition + size + ")"; 1014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira} 104