14fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/* 24fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Licensed to the Apache Software Foundation (ASF) under one or more 34fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * contributor license agreements. See the NOTICE file distributed with 44fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * this work for additional information regarding copyright ownership. 54fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * The ASF licenses this file to You under the Apache License, Version 2.0 64fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * (the "License"); you may not use this file except in compliance with 74fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * the License. You may obtain a copy of the License at 84fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * 94fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * http://www.apache.org/licenses/LICENSE-2.0 104fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * 114fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Unless required by applicable law or agreed to in writing, software 124fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * distributed under the License is distributed on an "AS IS" BASIS, 134fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 144fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * See the License for the specific language governing permissions and 154fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * limitations under the License. 164fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 174fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedypackage org.apache.commons.io.filefilter; 184fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 194fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyimport java.io.File; 204fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedyimport java.io.Serializable; 214fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 224fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/** 234fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * This filter accepts files or directories that are empty. 244fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * <p> 254fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * If the <code>File</code> is a directory it checks that 264fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * it contains no files. 274fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * <p> 284fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Example, showing how to print out a list of the 294fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * current directory's empty files/directories: 304fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * 314fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * <pre> 324fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * File dir = new File("."); 334fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * String[] files = dir.list( EmptyFileFilter.EMPTY ); 344fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * for ( int i = 0; i < files.length; i++ ) { 354fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * System.out.println(files[i]); 364fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * } 374fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * </pre> 384fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * 394fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * <p> 404fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Example, showing how to print out a list of the 414fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * current directory's non-empty files/directories: 424fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * 434fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * <pre> 444fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * File dir = new File("."); 454fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * String[] files = dir.list( EmptyFileFilter.NOT_EMPTY ); 464fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * for ( int i = 0; i < files.length; i++ ) { 474fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * System.out.println(files[i]); 484fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * } 494fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * </pre> 504fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * 514fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @since Commons IO 1.3 524fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @version $Revision: 587916 $ 534fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 544fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedypublic class EmptyFileFilter extends AbstractFileFilter implements Serializable { 554fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 564fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** Singleton instance of <i>empty</i> filter */ 574fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static final IOFileFilter EMPTY = new EmptyFileFilter(); 584fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 594fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** Singleton instance of <i>not-empty</i> filter */ 604fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public static final IOFileFilter NOT_EMPTY = new NotFileFilter(EMPTY); 614fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 624fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 634fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Restrictive consructor. 644fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 654fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy protected EmptyFileFilter() { 664fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 674fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 684fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy /** 694fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * Checks to see if the file is empty. 704fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * 714fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @param file the file or directory to check 724fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * @return <code>true</code> if the file or directory 734fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy * is <i>empty</i>, otherwise <code>false</code>. 744fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy */ 754fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy public boolean accept(File file) { 764fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy if (file.isDirectory()) { 774fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy File[] files = file.listFiles(); 784fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return (files == null || files.length == 0); 794fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } else { 804fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy return (file.length() == 0); 814fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 824fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy } 834fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy 844fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy} 85