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 }