1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.io.filefilter;
18
19 import java.io.File;
20
21 /**
22 * Filters files based on size, can filter either smaller files or
23 * files equal to or larger than a given threshold.
24 * <p>
25 * For example, to print all files and directories in the
26 * current directory whose size is greater than 1 MB:
27 *
28 * <pre>
29 * File dir = new File(".");
30 * String[] files = dir.list( new SizeFileFilter(1024 * 1024) );
31 * for ( int i = 0; i < files.length; i++ ) {
32 * System.out.println(files[i]);
33 * }
34 * </pre>
35 *
36 * @author Rahul Akolkar
37 * @version $Id: SizeFileFilter.java 463570 2006-10-13 06:14:41Z niallp $
38 * @since Commons IO 1.2
39 */
40 public class SizeFileFilter extends AbstractFileFilter {
41
42 /** The size threshold. */
43 private long size;
44 /** Whether the files accepted will be larger or smaller. */
45 private boolean acceptLarger;
46
47 /**
48 * Constructs a new size file filter for files equal to or
49 * larger than a certain size.
50 *
51 * @param size the threshold size of the files
52 * @throws IllegalArgumentException if the size is negative
53 */
54 public SizeFileFilter(long size) {
55 this(size, true);
56 }
57
58 /**
59 * Constructs a new size file filter for files based on a certain size
60 * threshold.
61 *
62 * @param size the threshold size of the files
63 * @param acceptLarger if true, files equal to or larger are accepted,
64 * otherwise smaller ones (but not equal to)
65 * @throws IllegalArgumentException if the size is negative
66 */
67 public SizeFileFilter(long size, boolean acceptLarger) {
68 if (size < 0) {
69 throw new IllegalArgumentException("The size must be non-negative");
70 }
71 this.size = size;
72 this.acceptLarger = acceptLarger;
73 }
74
75 //-----------------------------------------------------------------------
76 /**
77 * Checks to see if the size of the file is favorable.
78 * <p>
79 * If size equals threshold and smaller files are required,
80 * file <b>IS NOT</b> selected.
81 * If size equals threshold and larger files are required,
82 * file <b>IS</b> selected.
83 *
84 * @param file the File to check
85 * @return true if the filename matches
86 */
87 public boolean accept(File file) {
88 boolean smaller = file.length() < size;
89 return acceptLarger ? !smaller : smaller;
90 }
91
92 }