196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/* 296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * this work for additional information regarding copyright ownership. 596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * (the "License"); you may not use this file except in compliance with 796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * the License. You may obtain a copy of the License at 896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 1096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 1196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * See the License for the specific language governing permissions and 1596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * limitations under the License. 1696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 1796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpackage org.apache.commons.io.filefilter; 1896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 1996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.File; 2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.Serializable; 2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/** 2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Filters files based on size, can filter either smaller files or 2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * files equal to or larger than a given threshold. 2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * For example, to print all files and directories in the 2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * current directory whose size is greater than 1 MB: 2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <pre> 3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * File dir = new File("."); 3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * String[] files = dir.list( new SizeFileFilter(1024 * 1024) ); 3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * for ( int i = 0; i < files.length; i++ ) { 3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * System.out.println(files[i]); 3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * } 3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * </pre> 3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Rahul Akolkar 3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @version $Id: SizeFileFilter.java 591058 2007-11-01 15:47:05Z niallp $ 3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @since Commons IO 1.2 4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class SizeFileFilter extends AbstractFileFilter implements Serializable { 4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** The size threshold. */ 4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private final long size; 4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** Whether the files accepted will be larger or smaller. */ 4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private final boolean acceptLarger; 4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Constructs a new size file filter for files equal to or 5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * larger than a certain size. 5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param size the threshold size of the files 5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IllegalArgumentException if the size is negative 5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public SizeFileFilter(long size) { 5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project this(size, true); 5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Constructs a new size file filter for files based on a certain size 6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * threshold. 6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param size the threshold size of the files 6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param acceptLarger if true, files equal to or larger are accepted, 6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * otherwise smaller ones (but not equal to) 6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IllegalArgumentException if the size is negative 6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public SizeFileFilter(long size, boolean acceptLarger) { 6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (size < 0) { 7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throw new IllegalArgumentException("The size must be non-negative"); 7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project this.size = size; 7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project this.acceptLarger = acceptLarger; 7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project //----------------------------------------------------------------------- 7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Checks to see if the size of the file is favorable. 7996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 8096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * If size equals threshold and smaller files are required, 8196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * file <b>IS NOT</b> selected. 8296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * If size equals threshold and larger files are required, 8396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * file <b>IS</b> selected. 8496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 8596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param file the File to check 8696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return true if the filename matches 8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 8896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public boolean accept(File file) { 8996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project boolean smaller = file.length() < size; 9096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return acceptLarger ? !smaller : smaller; 9196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 9296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 9396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 9496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Provide a String representaion of this file filter. 9596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 9696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return a String representaion 9796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 9896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public String toString() { 9996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String condition = acceptLarger ? ">=" : "<"; 10096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return super.toString() + "(" + condition + size + ")"; 10196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 10296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 10396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project} 104