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