View Javadoc

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  import java.util.List;
21  
22  /**
23   * Filters files based on the suffix (what the filename ends with).
24   * This is used in retrieving all the files of a particular type.
25   * <p>
26   * For example, to retrieve and print all <code>*.java</code> files 
27   * in the current directory:
28   *
29   * <pre>
30   * File dir = new File(".");
31   * String[] files = dir.list( new SuffixFileFilter(".java") );
32   * for (int i = 0; i &lt; files.length; i++) {
33   *     System.out.println(files[i]);
34   * }
35   * </pre>
36   *
37   * @since Commons IO 1.0
38   * @version $Revision: 471628 $ $Date: 2006-11-06 05:06:45 +0100 (Mo, 06 Nov 2006) $
39   * 
40   * @author Stephen Colebourne
41   * @author Federico Barbieri
42   * @author Serge Knystautas
43   * @author Peter Donald
44   */
45  public class SuffixFileFilter extends AbstractFileFilter {
46      
47      /** The filename suffixes to search for */
48      private String[] suffixes;
49  
50      /**
51       * Constructs a new Suffix file filter for a single extension.
52       * 
53       * @param suffix  the suffix to allow, must not be null
54       * @throws IllegalArgumentException if the suffix is null
55       */
56      public SuffixFileFilter(String suffix) {
57          if (suffix == null) {
58              throw new IllegalArgumentException("The suffix must not be null");
59          }
60          this.suffixes = new String[] {suffix};
61      }
62  
63      /**
64       * Constructs a new Suffix file filter for an array of suffixs.
65       * <p>
66       * The array is not cloned, so could be changed after constructing the
67       * instance. This would be inadvisable however.
68       * 
69       * @param suffixes  the suffixes to allow, must not be null
70       * @throws IllegalArgumentException if the suffix array is null
71       */
72      public SuffixFileFilter(String[] suffixes) {
73          if (suffixes == null) {
74              throw new IllegalArgumentException("The array of suffixes must not be null");
75          }
76          this.suffixes = suffixes;
77      }
78  
79      /**
80       * Constructs a new Suffix file filter for a list of suffixes.
81       * 
82       * @param suffixes  the suffixes to allow, must not be null
83       * @throws IllegalArgumentException if the suffix list is null
84       * @throws ClassCastException if the list does not contain Strings
85       */
86      public SuffixFileFilter(List suffixes) {
87          if (suffixes == null) {
88              throw new IllegalArgumentException("The list of suffixes must not be null");
89          }
90          this.suffixes = (String[]) suffixes.toArray(new String[suffixes.size()]);
91      }
92  
93      /**
94       * Checks to see if the filename ends with the suffix.
95       * 
96       * @param file  the File to check
97       * @return true if the filename ends with one of our suffixes
98       */
99      public boolean accept(File file) {
100         String name = file.getName();
101         for (int i = 0; i < this.suffixes.length; i++) {
102             if (name.endsWith(this.suffixes[i])) {
103                 return true;
104             }
105         }
106         return false;
107     }
108     
109     /**
110      * Checks to see if the filename ends with the suffix.
111      * 
112      * @param file  the File directory
113      * @param name  the filename
114      * @return true if the filename ends with one of our suffixes
115      */
116     public boolean accept(File file, String name) {
117         for (int i = 0; i < this.suffixes.length; i++) {
118             if (name.endsWith(this.suffixes[i])) {
119                 return true;
120             }
121         }
122         return false;
123     }
124     
125 }