001 /* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016 package org.opengion.fukurou.util; 017 018 import java.io.File; 019 import java.io.FileFilter; 020 import java.util.List; 021 import java.util.ArrayList; 022 import java.util.Calendar; 023 import java.util.StringTokenizer; 024 025 import java.util.regex.Pattern; 026 import java.util.regex.Matcher; 027 028 /** 029 * HybsFileFilter.java ã¯ã€è¤?•°ã® FileFilter ã‚’é?次実行ã™ã‚?フィルタクラスã§ã™ã? 030 * 031 * FileFilter インターフェースを継承ã—ã?File クラス㮠listFiles(FileFilter) メソãƒ?ƒ‰ã« 032 * 渡ã™ã“ã¨ãŒã§ãã¾ã™ã? 033 * Filterã«è¨å®šã•れãŸè¤?•°ã®ãƒ•ィルタã™ã¹ã¦ã‚’æº?Ÿã™å?åˆã?時ã?ã¿ã€accept(File pathname) 034 * メソãƒ?ƒ‰ã¯ã€true ã‚’è¿”ã—ã¾ã™ã? 035 * 036 * ã“ã?実è£??åŒæœŸåŒ–ã•れã¾ã›ã‚“ã€? 037 * 038 * @version 4.0 039 * @author Kazuhiko Hasegawa 040 * @since JDK5.0, 041 */ 042 public final class HybsFileFilter implements FileFilter { 043 private final List<FileFilter> list = new ArrayList<FileFilter>(); 044 private final boolean isUseDIR ; 045 046 /** 047 * 引数ã«ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®åˆ¤å®šã‚’行ã†ã‹ã©ã?‹ã‚’指定ã™ã‚‹ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã§ã™ã? 048 * ã“ã“ã§ã€true を指定ã™ã‚‹ã¨ã€ãƒ•ァイルã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ä¸¡æ–¹ã«å¯¾ã—㦠049 * 処ç?‚’実施ã—ã¾ã™ã? 050 * ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã®åˆ¤å®šã?å ´åˆã?acceptメソãƒ?ƒ‰ã§ã€false ãŒè¿”る㨠051 * ãれ以下ã?処ç?‚‚実行ã•れã¾ã›ã‚“ã€? 052 * 053 * @og.rev 5.1.2.0 (2010/01/01) 引数ã¤ãコンストラクタ追åŠ? 054 * 055 * @param useDIR 判定をãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã‚‚行ã†ã‹ã©ã?‹ 056 */ 057 public HybsFileFilter( final boolean useDIR ) { 058 super(); 059 isUseDIR = useDIR; 060 } 061 062 /** 063 * æŒ?®šã•ã‚ŒãŸæŠ½è±¡ãƒ‘ã‚¹åãŒãƒ‘スåリストã«å«ã¾ã‚Œã‚‹å¿?¦ãŒã‚ã‚‹å ´åˆã?スルー(鏿Š?ã•れã¾ã™ã? 064 * ã“ã“ã§ã®åˆ¤å®šãƒã‚¸ãƒ?‚¯ã§ã¯ã€ãƒ•ァイルã«ã¤ã?¦ã®ã¿å‡¦ç?—ã¾ã™ã? 065 * ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã¯ã€å¸¸ã«ã€true ã‚’è¿”ã—ã¾ã™ã? 066 */ 067 public HybsFileFilter() { 068 this( false ); 069 } 070 071 /** 072 * æŒ?®šã•ã‚ŒãŸæŠ½è±¡ãƒ‘ã‚¹åãŒãƒ‘スåリストã«å«ã¾ã‚Œã‚‹å¿?¦ãŒã‚ã‚‹å ´åˆã?スルー(鏿Š?ã•れã¾ã™ã? 073 * ã“ã“ã§ã®åˆ¤å®šãƒã‚¸ãƒ?‚¯ã§ã¯ã€ãƒ•ァイルã«ã¤ã?¦ã®ã¿å‡¦ç?—ã¾ã™ã? 074 * ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã¯ã€å¸¸ã«ã€true ã‚’è¿”ã—ã¾ã™ã? 075 * 076 * @param pathname ファイルオブジェクãƒ? 077 * 078 * @return パスåリストã«å«ã¾ã‚Œã‚‹ã‹ã©ã?‹ 079 * @see java.io.FileFilter#accept(File) 080 */ 081 public boolean accept( final File pathname ) { 082 if( pathname != null && (pathname.isFile() || isUseDIR) ) { // 5.1.2.0 (2010/01/01) 083 int size = list.size(); 084 for( int i=0; i<size; i++ ) { 085 FileFilter filter = list.get(i); 086 if( !filter.accept( pathname ) ) { 087 return false; 088 } 089 } 090 } 091 return true; 092 } 093 094 /** 095 * 外部æŒ?®šãƒ•ィルタ??å†?ƒ¨åˆ¤å®šæ¡ä»¶ã«ã€ãƒ•ィルタを追åŠ?—ã¾ã™ã? 096 * 引数ã?null ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 097 * 098 * @param filter 外部æŒ?®šãƒ•ィルタ 099 */ 100 public void addFileFilter( final FileFilter filter ) { 101 if( filter != null ) { list.add( filter ); } 102 } 103 104 /** 105 * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??æŒ?®šã•ã‚ŒãŸæŽ¥é 辞ã§å§‹ã¾ã‚‹å?åˆã?スルー(鏿Š?ã•れã¾ã™ã? 106 * 引数ã?null ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 107 * 引数ã«ã€?|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šã—ãŸå?åˆã?ã€OR 判æ–(ã©ã‚Œã‹ãŒä¸??)ã—ã¾ã™ã? 108 * 109 * @param prefix 接é è¾? 110 * @see java.lang.String#startsWith(String) 111 */ 112 public void startsWith( final String prefix ) { 113 startsWith( prefix, false ); // å転ã—ãªã? 114 // if( prefix != null ) { 115 // list.add( new StartsWithFilter( prefix ) ); 116 // } 117 } 118 119 /** 120 * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??æŒ?®šã•ã‚ŒãŸæŽ¥é 辞ã§å§‹ã¾ã‚‹å?åˆã?スルー(鏿Š?ã•れã¾ã™ã? 121 * 引数ã?null ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 122 * 引数ã«ã€?|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šã—ãŸå?åˆã?ã€OR 判æ–(ã©ã‚Œã‹ãŒä¸??)ã—ã¾ã™ã? 123 * reverse = true ã«è¨å®šã™ã‚‹ã¨ã€çµæžœã‚’å転ã•ã›ã¾ã™ã? 124 * 125 * @og.rev 5.1.2.0 (2010/01/01) reverse属æ?ã®è¿½åŠ? 126 * 127 * @param prefix 接é è¾? 128 * @param reverse true:çµæžœã‚’å転ã™ã‚‹ 129 * @see java.lang.String#startsWith(String) 130 */ 131 public void startsWith( final String prefix,final boolean reverse ) { 132 if( prefix != null ) { 133 list.add( new StartsWithFilter( prefix,reverse ) ); 134 } 135 } 136 137 /** 138 * æŒ?®šã•ã‚ŒãŸæŽ¥é 辞ã§å§‹ã¾ã‚‹å?åˆã«é¸æŠžã•れる FileFilter インターフェースã®å®Ÿè£??部クラスã§ã™ã? 139 * 引数ã«ã€?|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šã—ãŸå?åˆã?ã€OR 判æ–(ã©ã‚Œã‹ãŒä¸??)ã—ã¾ã™ã? 140 * 141 * @og.rev 5.1.2.0 (2010/01/01) '|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šå?ç??追åŠ??reverse属æ?ã®è¿½åŠ? 142 * 143 * @version 4.0 144 * @author Kazuhiko Hasegawa 145 * @since JDK5.0, 146 */ 147 private static class StartsWithFilter implements FileFilter { 148 // private final String pfix ; 149 private final String[] pfix ; 150 private final int cnt ; 151 private final boolean rvse ; 152 153 /** 154 * 接é 辞フィルターオブジェクトを作æ?ã—ã¾ã™ã? 155 * 156 * @param desc true:æ˜?? / false:é™é? 157 * @param reverse true:çµæžœã‚’å転ã™ã‚‹ 158 */ 159 StartsWithFilter( final String prefix,final boolean reverse ) { 160 // pfix = prefix; 161 rvse = reverse; 162 163 StringTokenizer token = new StringTokenizer( prefix, "|" ); 164 cnt = token.countTokens(); 165 166 pfix = new String[cnt]; 167 168 for( int i=0; i<cnt; i++ ) { 169 pfix[i] = token.nextToken(); 170 } 171 } 172 173 /** 174 * FileFilter インターフェース㮠accept( File ) メソãƒ?ƒ‰ 175 * 176 * @param pathname ファイルオブジェクãƒ? 177 * @return true:処ç?¯¾è±¡ / false:処ç?žå¯¾è±¡ 178 * @see java.io.FileFilter#accept( File ) 179 */ 180 public boolean accept( final File pathname ) { 181 // return pathname.getName().startsWith( pfix ); 182 183 for( int i=0; i<cnt; i++ ) { 184 if( pathname.getName().startsWith( pfix[i] ) ) { 185 return !rvse; 186 } 187 } 188 return rvse; 189 } 190 } 191 192 /** 193 * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??æŒ?®šã•ã‚ŒãŸæŽ¥é 辞ã§çµ‚ã‚ã‚‹å?åˆã?スルー(鏿Š?ã•れã¾ã™ã? 194 * 引数ã?null ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 195 * 引数ã«ã€?|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šã—ãŸå?åˆã?ã€OR 判æ–(ã©ã‚Œã‹ãŒä¸??)ã—ã¾ã™ã? 196 * 197 * @param suffix 接尾è¾? 198 * @see java.lang.String#endsWith(String) 199 */ 200 public void endsWith( final String suffix ) { 201 endsWith( suffix, false ); // å転ã—ãªã? 202 // if( suffix != null ) { 203 // list.add( new EndsWithFilter( suffix ) ); 204 // } 205 } 206 207 /** 208 * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??æŒ?®šã•ã‚ŒãŸæŽ¥é 辞ã§çµ‚ã‚ã‚‹å?åˆã?スルー(鏿Š?ã•れã¾ã™ã? 209 * 引数ã?null ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 210 * 引数ã«ã€?|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šã—ãŸå?åˆã?ã€OR 判æ–(ã©ã‚Œã‹ãŒä¸??)ã—ã¾ã™ã? 211 * reverse = true ã«è¨å®šã™ã‚‹ã¨ã€çµæžœã‚’å転ã•ã›ã¾ã™ã? 212 * 213 * @og.rev 5.1.2.0 (2010/01/01) reverse属æ?ã®è¿½åŠ? 214 * 215 * @param suffix 接尾è¾? 216 * @param reverse true:çµæžœã‚’å転ã™ã‚‹ 217 * @see java.lang.String#endsWith(String) 218 */ 219 public void endsWith( final String suffix,final boolean reverse ) { 220 if( suffix != null ) { 221 list.add( new EndsWithFilter( suffix,reverse ) ); 222 } 223 } 224 225 /** 226 * æŒ?®šã•ã‚ŒãŸæŽ¥é 辞ã§çµ‚ã‚ã‚‹å?åˆã«é¸æŠžã•れる FileFilter インターフェースã®å®Ÿè£??部クラスã§ã™ã? 227 * 引数ã«ã€?|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šã—ãŸå?åˆã?ã€OR 判æ–(ã©ã‚Œã‹ãŒä¸??)ã—ã¾ã™ã? 228 * 229 * @og.rev 5.1.2.0 (2010/01/01) '|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šå?ç??追åŠ??reverse属æ?ã®è¿½åŠ? 230 * 231 * @version 4.0 232 * @author Kazuhiko Hasegawa 233 * @since JDK5.0, 234 */ 235 private static class EndsWithFilter implements FileFilter { 236 // private final String sfix ; 237 private final String[] sfix ; 238 private final int cnt ; 239 private final boolean rvse ; 240 241 /** 242 * 接é 辞フィルターオブジェクトを作æ?ã—ã¾ã™ã? 243 * 244 * @param desc true:æ˜?? / false:é™é? 245 * @param reverse true:çµæžœã‚’å転ã™ã‚‹ 246 */ 247 EndsWithFilter( String suffix,final boolean reverse ) { 248 // sfix = suffix; 249 rvse = reverse; 250 251 StringTokenizer token = new StringTokenizer( suffix, "|" ); 252 cnt = token.countTokens(); 253 254 sfix = new String[cnt]; 255 256 for( int i=0; i<cnt; i++ ) { 257 sfix[i] = token.nextToken(); 258 } 259 } 260 261 /** 262 * FileFilter インターフェース㮠accept( File ) メソãƒ?ƒ‰ 263 * 264 * @param pathname ファイルオブジェクãƒ? 265 * @return true:処ç?¯¾è±¡ / false:処ç?žå¯¾è±¡ 266 * @see java.io.FileFilter#accept( File ) 267 */ 268 public boolean accept( final File pathname ) { 269 // return pathname.getName().endsWith( sfix ); 270 271 for( int i=0; i<cnt; i++ ) { 272 if( pathname.getName().endsWith( sfix[i] ) ) { 273 return !rvse; 274 } 275 } 276 return rvse; 277 } 278 } 279 280 /** 281 * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??æŒ?®šã•ã‚ŒãŸæ–?—å?ãŒãƒ•ァイルåã«å«ã¾ã‚Œã‚‹å ´åˆã?スルー(鏿Š?ã•れã¾ã™ã? 282 * 引数ã?null ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 283 * 引数ã«ã€?|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šã—ãŸå?åˆã?ã€OR 判æ–(ã©ã‚Œã‹ãŒä¸??)ã—ã¾ã™ã? 284 * 285 * @param str æŒ?®šã?部åˆ?–‡å—å? 286 */ 287 public void instr( final String str ) { 288 instr( str, false ); // å転ã—ãªã? 289 // if( str != null ) { 290 // list.add( new InstrFilter( str ) ); 291 // } 292 } 293 294 /** 295 * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??æŒ?®šã•ã‚ŒãŸæ–?—å?ãŒãƒ•ァイルåã«å«ã¾ã‚Œã‚‹å ´åˆã?スルー(鏿Š?ã•れã¾ã™ã? 296 * 引数ã?null ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 297 * 引数ã«ã€?|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šã—ãŸå?åˆã?ã€OR 判æ–(ã©ã‚Œã‹ãŒä¸??)ã—ã¾ã™ã? 298 * reverse = true ã«è¨å®šã™ã‚‹ã¨ã€çµæžœã‚’å転ã•ã›ã¾ã™ã? 299 * 300 * @og.rev 5.1.2.0 (2010/01/01) reverse属æ?ã®è¿½åŠ? 301 * 302 * @param str æŒ?®šã?部åˆ?–‡å—å? 303 * @param reverse çµæžœã‚’å転ã•ã›ã‚‹ã‹ã©ã?‹(true:å転) 304 */ 305 public void instr( final String str,final boolean reverse ) { 306 if( str != null ) { 307 list.add( new InstrFilter( str,reverse ) ); 308 } 309 } 310 311 /** 312 * æŒ?®šã•ã‚ŒãŸæ–?—å?ãŒãƒ•ァイルåã«å«ã¾ã‚Œã‚‹å ´åˆã«é¸æŠžã•れる FileFilter インターフェースã®å®Ÿè£??部クラスã§ã™ã? 313 * 引数ã«ã€?|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šã—ãŸå?åˆã?ã€OR 判æ–(ã©ã‚Œã‹ãŒä¸??)ã—ã¾ã™ã? 314 * 315 * @og.rev 5.1.2.0 (2010/01/01) '|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šå?ç??追åŠ??reverse属æ?ã®è¿½åŠ? 316 * 317 * @version 4.0 318 * @author Kazuhiko Hasegawa 319 * @since JDK5.0, 320 */ 321 private static class InstrFilter implements FileFilter { 322 // private final String instr ; 323 private final String[] instr ; 324 private final int cnt ; 325 private final boolean rvse ; 326 327 /** 328 * æ–?—å?åŒ?«ãƒ•ィルターオブジェクトを作æ?ã—ã¾ã™ã? 329 * 330 * @param desc true:æ˜?? / false:é™é? 331 * @param reverse true:çµæžœã‚’å転ã™ã‚‹ 332 */ 333 InstrFilter( String str,final boolean reverse ) { 334 // instr = str; 335 rvse = reverse; 336 337 StringTokenizer token = new StringTokenizer( str, "|" ); 338 cnt = token.countTokens(); 339 340 instr = new String[cnt]; 341 342 for( int i=0; i<cnt; i++ ) { 343 instr[i] = token.nextToken(); 344 } 345 } 346 347 /** 348 * FileFilter インターフェース㮠accept( File ) メソãƒ?ƒ‰ 349 * 350 * @param pathname ファイルオブジェクãƒ? 351 * @return true:処ç?¯¾è±¡ / false:処ç?žå¯¾è±¡ 352 * @see java.io.FileFilter#accept( File ) 353 */ 354 public boolean accept( final File pathname ) { 355 // return ( pathname.getName().indexOf( instr ) >= 0 ); 356 357 for( int i=0; i<cnt; i++ ) { 358 if( pathname.getName().indexOf( instr[i] ) >= 0 ) { 359 return !rvse; 360 } 361 } 362 return rvse; 363 } 364 } 365 366 /** 367 * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??ファイルåãŒä¸??ã™ã‚‹å ´åˆã?スルー(鏿Š?ã•れã¾ã™ã? 368 * 大æ–?—å°æ–‡å—ã?区別ã—ã¾ã›ã‚“ã€? 369 * 引数ã?null ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 370 * 引数ã«ã€?|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šã—ãŸå?åˆã?ã€OR 判æ–(ã©ã‚Œã‹ãŒä¸??)ã—ã¾ã™ã? 371 * 372 * @param str ãƒ•ã‚¡ã‚¤ãƒ«åæ–‡å—å? 373 */ 374 public void fileEquals( final String str ) { 375 fileEquals( str, false ); // å転ã—ãªã? 376 // if( str != null ) { 377 // list.add( new EqualsFilter( str ) ); 378 // } 379 } 380 381 /** 382 * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??ファイルåãŒä¸??ã™ã‚‹å ´åˆã?スルー(鏿Š?ã•れã¾ã™ã? 383 * 大æ–?—å°æ–‡å—ã?区別ã—ã¾ã›ã‚“ã€? 384 * 引数ã?null ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 385 * 引数ã«ã€?|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šã—ãŸå?åˆã?ã€OR 判æ–(ã©ã‚Œã‹ãŒä¸??)ã—ã¾ã™ã? 386 * reverse = true ã«è¨å®šã™ã‚‹ã¨ã€çµæžœã‚’å転ã•ã›ã¾ã™ã? 387 * 388 * @og.rev 5.1.2.0 (2010/01/01) reverse属æ?ã®è¿½åŠ? 389 * 390 * @param str ãƒ•ã‚¡ã‚¤ãƒ«åæ–‡å—å? 391 * @param reverse true:çµæžœã‚’å転ã™ã‚‹ 392 */ 393 public void fileEquals( final String str,final boolean reverse ) { 394 if( str != null ) { 395 list.add( new EqualsFilter( str,reverse ) ); 396 } 397 } 398 399 /** 400 * ファイルåãŒä¸??ã™ã‚‹å ´åˆã«é¸æŠžã•れる FileFilter インターフェースã®å®Ÿè£??部クラスã§ã™ã? 401 * 引数ã«ã€?|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šã—ãŸå?åˆã?ã€OR 判æ–(ã©ã‚Œã‹ãŒä¸??)ã—ã¾ã™ã? 402 * 403 * @og.rev 5.1.2.0 (2010/01/01) '|' 区åˆ?‚Šæ–?—ã§è¤?•°è¨å®šå?ç??追åŠ??reverse属æ?ã®è¿½åŠ? 404 * 405 * @version 4.0 406 * @author Kazuhiko Hasegawa 407 * @since JDK5.0, 408 */ 409 private static class EqualsFilter implements FileFilter { 410 // private final String eqstr ; 411 private final String[] eqstr ; 412 private final int cnt ; 413 private final boolean rvse ; 414 415 /** 416 * ファイルåä¸??フィルターオブジェクトを作æ?ã—ã¾ã™ã? 417 * 418 * @param desc true:æ˜?? / false:é™é? 419 * @param reverse true:çµæžœã‚’å転ã™ã‚‹ 420 */ 421 EqualsFilter( String str,final boolean reverse ) { 422 // eqstr = str; 423 rvse = reverse; 424 425 StringTokenizer token = new StringTokenizer( str, "|" ); 426 cnt = token.countTokens(); 427 428 eqstr = new String[cnt]; 429 430 for( int i=0; i<cnt; i++ ) { 431 eqstr[i] = token.nextToken(); 432 } 433 } 434 435 /** 436 * FileFilter インターフェース㮠accept( File ) メソãƒ?ƒ‰ 437 * 438 * @param pathname ファイルオブジェクãƒ? 439 * @return true:処ç?¯¾è±¡ / false:処ç?žå¯¾è±¡ 440 * @see java.io.FileFilter#accept( File ) 441 */ 442 public boolean accept( final File pathname ) { 443 // return pathname.getName().equalsIgnoreCase( eqstr ); 444 445 for( int i=0; i<cnt; i++ ) { 446 if( pathname.getName().equalsIgnoreCase( eqstr[i] ) ) { 447 return !rvse; 448 } 449 } 450 return rvse; 451 } 452 } 453 454 /** 455 * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??ファイルåãŒã€æŒ‡å®šã•れ㟠456 * <a href="/java/api14/api/java/util/regex/Pattern.html#sum">æ£è¦è¡¨ç¾</a> 457 * ã¨ä¸??ã™ã‚‹å ´åˆã?スルー(鏿Š?ã•れã¾ã? 458 * 大æ–?—å°æ–‡å—ã?区別ã—ã¾ã›ã‚“ã€? 459 * Pattern.compile( str,Pattern.CASE_INSENSITIVE ) ; 460 * pattern.matcher( pathname.getName() ).find() == true ã¨åŒã˜çµæžœãŒå¾—られã¾ã™ã? 461 * 引数ã?null ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 462 * 463 * @param str ãƒ•ã‚¡ã‚¤ãƒ«åæ–‡å—å?(æ£è¦è¡¨ç¾) 464 * @see java.util.regex.Pattern#compile(String,int) 465 * @see java.util.regex.Matcher#find() 466 */ 467 public void matches( final String str ) { 468 matches( str, false ); // å転ã—ãªã? 469 // if( str != null ) { 470 // list.add( new MatchesFilter( str ) ); 471 // } 472 } 473 474 /** 475 * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??ファイルåãŒã€æŒ‡å®šã•れ㟠476 * <a href="/java/api14/api/java/util/regex/Pattern.html#sum">æ£è¦è¡¨ç¾</a> 477 * ã¨ä¸??ã™ã‚‹å ´åˆã?スルー(鏿Š?ã•れã¾ã? 478 * 大æ–?—å°æ–‡å—ã?区別ã—ã¾ã›ã‚“ã€? 479 * Pattern.compile( str,Pattern.CASE_INSENSITIVE ) ; 480 * pattern.matcher( pathname.getName() ).find() == true ã¨åŒã˜çµæžœãŒå¾—られã¾ã™ã? 481 * 引数ã?null ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 482 * reverse = true ã«è¨å®šã™ã‚‹ã¨ã€çµæžœã‚’å転ã•ã›ã¾ã™ã? 483 * 484 * @og.rev 5.1.2.0 (2010/01/01) reverse属æ?ã®è¿½åŠ? 485 * 486 * @param str ãƒ•ã‚¡ã‚¤ãƒ«åæ–‡å—å?(æ£è¦è¡¨ç¾) 487 * @param reverse true:çµæžœã‚’å転ã™ã‚‹ 488 * @see java.util.regex.Pattern#compile(String,int) 489 * @see java.util.regex.Matcher#find() 490 */ 491 public void matches( final String str,final boolean reverse ) { 492 if( str != null ) { 493 list.add( new MatchesFilter( str,reverse ) ); 494 } 495 } 496 497 /** 498 * ファイルåãŒã€æŒ‡å®šã•ã‚ŒãŸæ£è¦è¡¨ç¾ã¨ä¸??ã™ã‚‹å ´åˆã«é¸æŠžã•れる FileFilter インターフェースã®å®Ÿè£??部クラスã§ã™ã? 499 * 500 * @og.rev 5.1.2.0 (2010/01/01) reverse属æ?ã®è¿½åŠ? 501 * 502 * @version 4.0 503 * @author Kazuhiko Hasegawa 504 * @since JDK5.0, 505 */ 506 private static class MatchesFilter implements FileFilter { 507 private final Pattern pattern ; 508 private final boolean rvse ; 509 510 /** 511 * æ£è¦è¡¨ç¾ä¸??フィルターオブジェクトを作æ?ã—ã¾ã™ã? 512 * 513 * @param desc true:æ˜?? / false:é™é? 514 * @param reverse true:çµæžœã‚’å転ã™ã‚‹ 515 */ 516 MatchesFilter( final String str,final boolean reverse ) { 517 pattern = Pattern.compile( str,Pattern.CASE_INSENSITIVE ); 518 rvse = reverse; 519 } 520 521 /** 522 * FileFilter インターフェース㮠accept( File ) メソãƒ?ƒ‰ 523 * 524 * @param pathname ファイルオブジェクãƒ? 525 * @return true:処ç?¯¾è±¡ / false:処ç?žå¯¾è±¡ 526 * @see java.io.FileFilter#accept( File ) 527 */ 528 public boolean accept( final File pathname ) { 529 Matcher match = pattern.matcher( pathname.getName() ); 530 // return match.find() ; 531 if( match.find() ) { return !rvse; } 532 else { return rvse; } 533 } 534 } 535 536 /** 537 * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??ファイルåãŒã€æŒ‡å®šã•れ㟠538 * <a href="/java/api14/api/java/util/regex/Pattern.html#sum">æ£è¦è¡¨ç¾</a> 539 * ã¨ä¸??ã—ãªã??åˆã?スルー(鏿Š?ã•れã¾ã™ã? 540 * 大æ–?—å°æ–‡å—ã?区別ã—ã¾ã›ã‚“ã€? 541 * Pattern.compile( str,Pattern.CASE_INSENSITIVE ) ; 542 * pattern.matcher( pathname.getName() ).find() == false ã¨åŒã˜çµæžœãŒå¾—られã¾ã™ã? 543 * 引数ã?null ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 544 * 545 * @param str ãƒ•ã‚¡ã‚¤ãƒ«åæ–‡å—å?(æ£è¦è¡¨ç¾) ã¨ãƒžãƒƒãƒã—ãªã? 546 * @see java.util.regex.Pattern#compile(String,int) 547 * @see java.util.regex.Matcher#find() 548 */ 549 // public void unMatches( final String str ) { 550 // if( str != null ) { 551 // list.add( new UnMatchesFilter( str ) ); 552 // } 553 // } 554 555 /** 556 * ファイルåãŒã€æŒ‡å®šã•ã‚ŒãŸæ£è¦è¡¨ç¾ã¨ä¸??ã—ãªã??åˆã«é¸æŠžã•れる FileFilter インターフェースã®å®Ÿè£??部クラスã§ã™ã? 557 * 558 * @version 4.0 559 * @author Kazuhiko Hasegawa 560 * @since JDK5.0, 561 */ 562 // private static class UnMatchesFilter implements FileFilter { 563 // private final Pattern pattern ; 564 // 565 // /** 566 // * æ£è¦è¡¨ç¾ä¸ä¸??フィルターオブジェクトを作æ?ã—ã¾ã™ã? 567 // * 568 // * @param desc true:æ˜?? / false:é™é? 569 // */ 570 // UnMatchesFilter( String str ) { 571 // pattern = Pattern.compile( str,Pattern.CASE_INSENSITIVE ); 572 // } 573 // 574 // /** 575 // * FileFilter インターフェース㮠accept( File ) メソãƒ?ƒ‰ 576 // * 577 // * @param pathname ファイルオブジェクãƒ? 578 // * @return true:処ç?¯¾è±¡ / false:処ç?žå¯¾è±¡ 579 // * @see java.io.FileFilter#accept( File ) 580 // */ 581 // public boolean accept( final File pathname ) { 582 // Matcher match = pattern.matcher( pathname.getName() ); 583 // return ! match.find() ; 584 // } 585 // } 586 587 /** 588 * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??æŒ?®šã?タイãƒ?‚¹ã‚¿ãƒ³ãƒ—以後ã«å¤‰æ›´ã•れã¦ã?‚‹å ´åˆã?スルー(鏿Š?ã•れã¾ã™ã? 589 * ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã¯ã€ã“ã“ã?判定ã§ã¯ç„¡è¦–ã—ã¾ã™ã?(å¿?š true ã‚’è¿”ã—ã¾ã? 590 * 日付ã‘ã®æŒ?®šã«ã€YYYYMMDD å½¢å¼ã? ?˜æ–‡å—æ•°å—æ–‡å—å?以外ã«ã€? 591 * TODAY ã‚?YESTERDAY ãªã©ã‚‚使用ã§ãã¾ã™ã? 592 * TODAY ã¯ã€å®Ÿè¡Œæ—¥ã® 00:00:00 を基準時刻ã¨ã—ã?YESTERDAY ã¯ã€ãã®å‰æ—¥ã«ãªã‚Šã¾ã™ã? 593 * 引数ã?null ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 594 * 595 * @param modify 時刻を表ã?long 値(ミリ秒å˜ä½? 596 */ 597 public void lastModified( final String modify ) { 598 if( modify != null ) { 599 list.add( new ModifyFileFilter( modify ) ); 600 } 601 } 602 603 /** 604 * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??æŒ?®šã?大ãã•より大ãã„ファイルã®å ´åˆã?スルー(鏿Š?ã•れã¾ã™ã? 605 * 引数ã?0以ä¸?マイナス) ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 606 * 607 * @param len ファイルã®å¤§ãã•(Kãƒã‚¤ãƒˆå˜ä½?。åŒå€¤ã‚’å«ã‚? 608 */ 609 public void isLarger( final int len ) { 610 if( len >= 0 ) { 611 list.add( new IsLargerFilter( len ) ); 612 } 613 } 614 615 /** 616 * æŒ?®šã?大ãã•より大ãã„ファイルã®å ´åˆã«é¸æŠžã•れる FileFilter インターフェースã®å®Ÿè£??部クラスã§ã™ã? 617 * 618 * @version 4.0 619 * @author Kazuhiko Hasegawa 620 * @since JDK5.0, 621 */ 622 private static class IsLargerFilter implements FileFilter { 623 private final long size ; 624 625 /** 626 * 大ãã„ファイルフィルターオブジェクトを作æ?ã—ã¾ã™ã? 627 * 628 * @param desc true:æ˜?? / false:é™é? 629 */ 630 IsLargerFilter( int len ) { 631 size = len ; 632 } 633 634 /** 635 * FileFilter インターフェース㮠accept( File ) メソãƒ?ƒ‰ 636 * 637 * @param pathname ファイルオブジェクãƒ? 638 * @return true:処ç?¯¾è±¡ / false:処ç?žå¯¾è±¡ 639 * @see java.io.FileFilter#accept( File ) 640 */ 641 public boolean accept( final File pathname ) { 642 return pathname.length() >= size; 643 } 644 } 645 646 /** 647 * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??æŒ?®šã?大ãã•よりå°ã•ã?ƒ•ァイルã®å ´åˆã?スルー(鏿Š?ã•れã¾ã™ã? 648 * 引数ã?0以ä¸?マイナス) ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€? 649 * 650 * @param len ファイルã®å¤§ãã•(Kãƒã‚¤ãƒˆå˜ä½?。åŒå€¤ã‚’å«ã¾ãªã?? 651 */ 652 public void isSmaller( final int len ) { 653 if( len >= 0 ) { 654 list.add( new IsSmallerFilter( len ) ); 655 } 656 } 657 658 /** 659 * æŒ?®šã?大ãã•よりå°ã•ã?ƒ•ァイルã®å ´åˆé¸æŠžã•れる FileFilter インターフェースã®å®Ÿè£??部クラスã§ã™ã? 660 * 661 * @version 4.0 662 * @author Kazuhiko Hasegawa 663 * @since JDK5.0, 664 */ 665 private static class IsSmallerFilter implements FileFilter { 666 private final long size ; 667 668 /** 669 * å°ã•ã?ƒ•ァイルフィルターオブジェクトを作æ?ã—ã¾ã™ã? 670 * 671 * @param desc true:æ˜?? / false:é™é? 672 */ 673 IsSmallerFilter( int len ) { 674 size = len ; 675 } 676 677 /** 678 * FileFilter インターフェース㮠accept( File ) メソãƒ?ƒ‰ 679 * 680 * @param pathname ファイルオブジェクãƒ? 681 * @return true:処ç?¯¾è±¡ / false:処ç?žå¯¾è±¡ 682 * @see java.io.FileFilter#accept( File ) 683 */ 684 public boolean accept( final File pathname ) { 685 return pathname.length() < size; 686 } 687 } 688 689 /** 690 * ã“ã?オブジェクトã?æ–?—å?表ç¾ã‚’è¿”ã—ã¾ã™ã? 691 * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã? 692 * 693 * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?—å?è¡¨ç¾ 694 */ 695 @Override 696 public String toString() { 697 StringBuilder buf = new StringBuilder(); 698 int size = list.size(); 699 for( int i=0; i<size; i++ ) { 700 buf.append( "no[" ).append( i ).append( "]=" ); 701 buf.append( list.get(i) ).append( "\n" ); 702 } 703 704 return buf.toString(); 705 } 706 } 707 708 /** 709 * ModifyFileFilter.java ã¯ã€æœ€çµ‚変更日付ã‘ã®ãƒ•ィルタークラスã§ã™ã? 710 * 711 * FileFilter インターフェースを継承ã—ã?ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã§æŒ?®šã?日付ã‘よりã‚? 712 * æœ?µ‚å¤‰æ›´æ—¥ä»˜ã‘ ãŒæ–°ã—ã„ファイルをã?é¸æŠžã—ã¾ã™ã? 713 * ã“ã?クラスã§ã¯ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¯ã€å¤‰æ›´æ—¥ä»˜ã‘ã«ç„¡é–¢ä¿‚ã«é¸æŠžã—ã¾ã™ã? 714 * 715 * 日付ã‘ã®æŒ?®šã«ã€YYYYMMDD å½¢å¼ã? ?˜æ–‡å—æ•°å—æ–‡å—å?以外ã«ã€TODAY ã‚?YESTERDAY ãªã©ã‚‚使用ã§ãã¾ã™ã? 716 * TODAY ã¯ã€å®Ÿè¡Œæ—¥ã® 00:00:00 を基準時刻ã¨ã—ã?YESTERDAY ã¯ã€ãã®å‰æ—¥ã«ãªã‚Šã¾ã™ã? 717 * ãƒãƒƒãƒå?ç?‰ã§ã€å‰æ—¥åˆ??å†ç·¨æˆã‚„ã€å?月å?ã‚’å?ç·¨æˆã™ã‚‹å?åˆã«ã€å®Ÿæ—¥ä»˜ã‘を指定ã›ãšã« 718 * 使用ã§ãã¾ã™ã? 719 * 720 * ã“ã?実è£??åŒæœŸåŒ–ã•れã¾ã›ã‚“ã€? 721 * 722 * @version 4.0 723 * @author Kazuhiko Hasegawa 724 * @since JDK5.0, 725 */ 726 class ModifyFileFilter implements FileFilter { 727 private final long modify ; 728 729 /** 730 * コンストラクター 731 * 732 * 日付ã‘ã®æŒ?®šæ–¹æ³•ã«ã¯ã€å®Ÿæ—¥ä»˜ã‘(YYYYMMDDå½¢å¼?例ï¼?0040323)㨠733 * 仮想日付ã‘(TODAY,YESTERDAY ãªã©)ãŒæŒ‡å®šã§ãã¾ã™ã? 734 * 735 * YYYYMMDD YYYYMMDDå½¢å¼ã?æŒ?®šæ—¥ã® 00:00:00 を基準時刻 736 * TODAY 実行日㮠00:00:00 を基準時刻 737 * YESTERDAY å®Ÿè¡Œæ—¥å‰æ—¥ã® 00:00:00 を基準時刻 738 * LAST_WEEK 実行日ã®å…ˆé?(7æ—¥å‰? 00:00:00 を基準時刻 739 * MONTH 実行月㮠1æ—¥ 00:00:00 を基準時刻 740 * LAST_MONTH å®Ÿè¡Œå‰æœˆã? åŒæ—¥ 00:00:00 を基準時刻 741 * LAST_YEAR 実行å‰å¹´ã® åŒæœˆåŒæ—¥ 00:00:00 を基準時刻 742 * 743 * @og.rev 5.3.5.0 (2011/05/01) ?¢æ™‚ï½£ã®ã‚¯ãƒªã‚¢ãƒŸã‚¹ã®ä¿®æ£ 744 * 745 * @param value æŒ?®šæ—¥ä»˜ã‘ 746 */ 747 public ModifyFileFilter( final String value ) { 748 if( value != null ) { 749 Calendar cal = Calendar.getInstance(); 750 751 // cal.clear( Calendar.HOUR_OF_DAY ); 752 cal.set( Calendar.HOUR_OF_DAY, 0 ); // 5.3.5.0 (2011/05/01) 時間ã®è§£æ±ºè¦å‰‡ãŒé©ç”¨ã•れるãŸã‚ã??¢æ™‚ï½£ã?‘ã¯ã€setメソãƒ?ƒ‰ã§ 0 ã«ã‚»ãƒ?ƒˆã™ã‚‹ã€? 753 cal.clear( Calendar.MINUTE ); 754 cal.clear( Calendar.SECOND ); 755 cal.clear( Calendar.MILLISECOND ); 756 757 if( value.equalsIgnoreCase( "YESTERDAY" ) ) { 758 cal.add( Calendar.DATE, -1 ); 759 } 760 else if( value.equalsIgnoreCase( "LAST_WEEK" ) ) { 761 cal.add( Calendar.DATE, -7 ); 762 } 763 else if( value.equalsIgnoreCase( "MONTH" ) ) { 764 cal.set( Calendar.DATE, 1 ); 765 } 766 else if( value.equalsIgnoreCase( "LAST_MONTH" ) ) { 767 cal.add( Calendar.MONTH, -1 ); 768 } 769 else if( value.equalsIgnoreCase( "LAST_YEAR" ) ) { 770 cal.add( Calendar.YEAR, -1 ); 771 } 772 else if( value.length() == 8 ) { 773 cal.set( Integer.parseInt( value.substring( 0,4 ) ) , 774 Integer.parseInt( value.substring( 4,6 ) ) - 1, 775 Integer.parseInt( value.substring( 6,8 ) ) ); 776 } 777 else if( ! value.equalsIgnoreCase( "TODAY" ) ) { 778 String errMsg = "ModifyFileFilter Error! modify Format [" + value + "]\n" 779 + "日付ã‘ã®æŒ?®šæ–¹æ³•ã«ã¯ã€å®Ÿæ—¥ä»˜ã‘(YYYYMMDDå½¢å¼?例ï¼?0040323)㨠\n" 780 + "仮想日付ã‘(TODAY,YESTERDAY ãªã©)ãŒæŒ‡å®šã§ãã¾ã™ã?\n" 781 + " YYYYMMDD YYYYMMDDå½¢å¼ã?æŒ?®šæ—¥ã® 00:00:00 を基準時刻 \n" 782 + " TODAY 実行日㮠00:00:00 を基準時刻 \n" 783 + " YESTERDAY å®Ÿè¡Œæ—¥å‰æ—¥ã® 00:00:00 を基準時刻 \n" 784 + " LAST_WEEK 実行日ã®å…ˆé?(7æ—¥å‰? 00:00:00 を基準時刻 \n" 785 + " MONTH 実行月㮠1æ—¥ 00:00:00 を基準時刻 \n" 786 + " LAST_MONTH å®Ÿè¡Œå‰æœˆã? åŒæ—¥ 00:00:00 を基準時刻 \n" 787 + " LAST_YEAR 実行å‰å¹´ã® åŒæœˆåŒæ—¥ 00:00:00 を基準時刻 \n" ; 788 throw new RuntimeException( errMsg ); 789 } 790 modify = cal.getTimeInMillis() ; 791 } 792 else { 793 throw new RuntimeException( "ModifyFileFilter Error! modify valus is not null" ); 794 } 795 } 796 797 /** 798 * FileFilter インターフェース㮠accept( File ) メソãƒ?ƒ‰ 799 * 800 * @param file ファイルオブジェクãƒ? 801 * 802 * @return true:処ç?¯¾è±¡ / false:処ç?žå¯¾è±¡ 803 * @see java.io.FileFilter#accept( File ) 804 */ 805 public boolean accept( final File file ) { 806 return file.isDirectory() || ( file.lastModified() >= modify ) ; 807 } 808 }