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 &lt; 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