1bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook/*
2bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Licensed to the Apache Software Foundation (ASF) under one or more
3bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * contributor license agreements.  See the NOTICE file distributed with
4bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * this work for additional information regarding copyright ownership.
5bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * The ASF licenses this file to You under the Apache License, Version 2.0
6bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * (the "License"); you may not use this file except in compliance with
7bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * the License.  You may obtain a copy of the License at
8bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
9bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *      http://www.apache.org/licenses/LICENSE-2.0
10bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
11bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Unless required by applicable law or agreed to in writing, software
12bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * distributed under the License is distributed on an "AS IS" BASIS,
13bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * See the License for the specific language governing permissions and
15bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * limitations under the License.
16bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */
17bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookpackage org.apache.commons.io.filefilter;
18bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
19bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.File;
20bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.Serializable;
21bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
22bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook/**
23bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This filter accepts <code>File</code>s that can be written to.
24bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p>
25bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Example, showing how to print out a list of the
26bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * current directory's <i>writable</i> files:
27bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
28bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <pre>
29bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * File dir = new File(".");
30bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * String[] files = dir.list( CanWriteFileFilter.CAN_WRITE );
31bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * for ( int i = 0; i &lt; files.length; i++ ) {
32bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *     System.out.println(files[i]);
33bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * }
34bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * </pre>
35bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
36bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p>
37bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Example, showing how to print out a list of the
38bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * current directory's <i>un-writable</i> files:
39bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
40bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <pre>
41bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * File dir = new File(".");
42bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * String[] files = dir.list( CanWriteFileFilter.CANNOT_WRITE );
43bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * for ( int i = 0; i &lt; files.length; i++ ) {
44bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *     System.out.println(files[i]);
45bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * }
46bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * </pre>
47bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
48bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p>
49bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <b>N.B.</b> For read-only files, use
50bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *    <code>CanReadFileFilter.READ_ONLY</code>.
51bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
52bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.3
53bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @version $Revision: 587916 $
54bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */
55bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookpublic class CanWriteFileFilter extends AbstractFileFilter implements Serializable {
56bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
57bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    /** Singleton instance of <i>writable</i> filter */
58bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public static final IOFileFilter CAN_WRITE = new CanWriteFileFilter();
59bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
60bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    /** Singleton instance of not <i>writable</i> filter */
61bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public static final IOFileFilter CANNOT_WRITE = new NotFileFilter(CAN_WRITE);
62bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
63bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    /**
64bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * Restrictive consructor.
65bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     */
66bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    protected CanWriteFileFilter() {
67bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    }
68bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
69bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    /**
70bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * Checks to see if the file can be written to.
71bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     *
72bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * @param file  the File to check
73bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * @return <code>true</code> if the file can be
74bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     *  written to, otherwise <code>false</code>.
75bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     */
76bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public boolean accept(File file) {
77bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        return file.canWrite();
78bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    }
79bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
80bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook}
81