001 /* 002 * Copyright 2001-2006 Geert Bevin <gbevin[remove] at uwyn dot com> 003 * Distributed under the terms of either: 004 * - the common development and distribution license (CDDL), v1.0; or 005 * - the GNU Lesser General Public License, v2.1 or later 006 * $Id: FileUtils.java 3108 2006-03-13 18:03:00Z gbevin $ 007 */ 008 package com.uwyn.jhighlight.tools; 009 010 import java.io.File; 011 import java.util.ArrayList; 012 import java.util.Iterator; 013 import java.util.regex.Pattern; 014 015 /** 016 * Collection of utility methods to work with files. 017 * 018 * @author Geert Bevin (gbevin[remove] at uwyn dot com) 019 * @version $Revision: 3108 $ 020 * @since 1.0 021 */ 022 public abstract class FileUtils 023 { 024 private FileUtils() 025 { 026 } 027 028 /** 029 * Recursively traverse a directory hierachy and obtain a list of all 030 * absolute file names. 031 * <p>Regular expression patterns can be provided to explicitly include 032 * and exclude certain file names. 033 * 034 * @param file the directory whose file hierarchy will be traversed 035 * @param included an array of regular expression patterns that will be 036 * used to determine which files should be included; or 037 * <p><code>null</code> if all files should be included 038 * @param excluded an array of regular expression patterns that will be 039 * used to determine which files should be excluded; or 040 * <p><code>null</code> if no files should be excluded 041 * @return the list of absolute file names 042 * @since 1.0 043 */ 044 public static ArrayList getFileList(File file, Pattern[] included, Pattern[] excluded) 045 { 046 return getFileList(file, included, excluded, true); 047 } 048 049 private static ArrayList getFileList(File file, Pattern[] included, Pattern[] excluded, boolean root) 050 { 051 if (null == file) 052 { 053 return new ArrayList(); 054 } 055 056 ArrayList filelist = new ArrayList(); 057 if (file.isDirectory()) 058 { 059 String[] list = file.list(); 060 if (null != list) 061 { 062 String list_entry; 063 for (int i = 0; i < list.length; i++) 064 { 065 list_entry = list[i]; 066 067 File next_file = new File(file.getAbsolutePath() + File.separator + list_entry); 068 ArrayList dir = getFileList(next_file, included, excluded, false); 069 070 Iterator dir_it = dir.iterator(); 071 String file_name; 072 while (dir_it.hasNext()) 073 { 074 file_name = (String)dir_it.next(); 075 076 if (root) 077 { 078 // if the file is not accepted, don't process it further 079 if (!StringUtils.filter(file_name, included, excluded)) 080 { 081 continue; 082 } 083 084 } 085 else 086 { 087 file_name = file.getName() + File.separator + file_name; 088 } 089 090 int filelist_size = filelist.size(); 091 for (int j = 0; j < filelist_size; j++) 092 { 093 if (((String)filelist.get(j)).compareTo(file_name) > 0) 094 { 095 filelist.add(j, file_name); 096 break; 097 } 098 } 099 if (filelist.size() == filelist_size) 100 { 101 filelist.add(file_name); 102 } 103 } 104 } 105 } 106 } 107 else if (file.isFile()) 108 { 109 String file_name = file.getName(); 110 111 if (root) 112 { 113 if (StringUtils.filter(file_name, included, excluded)) 114 { 115 filelist.add(file_name); 116 } 117 } 118 else 119 { 120 filelist.add(file_name); 121 } 122 } 123 124 return filelist; 125 } 126 127 public static String getExtension(String fileName) 128 { 129 if (null == fileName) throw new IllegalArgumentException("fileName can't be null."); 130 131 String ext = null; 132 133 int index = fileName.lastIndexOf('.'); 134 if (index > 0 && index < fileName.length() - 1) 135 { 136 ext = fileName.substring(index+1).toLowerCase(); 137 } 138 139 return ext; 140 } 141 }