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( final 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( final 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( final 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             * 共通å?ç?¼šå˜ä½è¨˜å·ã®ä»˜ä¸Žã•れãŸãƒã‚¤ãƒˆæ–‡å­—å?ã‹ã‚‰ã€long値ã§ã‚ã‚‹ãƒã‚¤ãƒˆã‚’求ã‚ã¾ã™ã?
605             * ç¾æ™‚点ã§ã¯ã€K , KB , M , MB , G , GB ã®ã¿å˜ä½æŒ‡å®šå¯èƒ½ã§ã™ã?
606             * ãれãžã‚Œã€å?ã®å€¤ã«å¯¾ã—ã¦ã€?024å€ã•れã¾ã™ã?
607             *
608             * 処ç?Œæ­£å¸¸ã«å‡ºæ¥ãªã??åˆã?ã€?1L ã‚’è¿”ã—ã¾ã™ã?
609             *
610             * @og.rev 5.7.4.3 (2014/03/28) æ–°è¦è¿½åŠ?
611             *
612             * @param       slen å˜ä½è¨˜å·ä»˜ããƒã‚¤ãƒˆå?
613             * @return      longã«æ›ç®—ã—ãŸãƒã‚¤ãƒˆå?
614             */
615            private long getByteSize( final String slen ) {
616                    if( slen == null ) { return -1L; }
617    
618                    String buf  = slen;
619                    int    size = buf.length();
620    
621                    // 'B' ã¯ã€å˜ä½æ›ç®—ã«é–¢ä¿‚ãªã?‚ºã€ã‚れã?削除ã—ã¾ã™ã?
622                    if( size > 0 && 'B' == buf.charAt( size-1 ) ) {
623                            buf = buf.substring( 0,size-1 );                        // 'B' ãŒå‰Šé™¤ã•ã‚ŒãŸæ–‡å­—å?
624                            size--;
625                    }
626    
627                    long rtn = -1L;
628    
629                    long tani = -1L;                                                                // 変æ›ã•れãŸã‹ã©ã?‹ã®åˆ¤å®šã‚‚å…¼ã­ã‚‹ã?
630                    if( size > 0 ) {
631                            char ch = buf.charAt( size-1 );                         // 'K' , 'M' , 'G' ã®ãƒã‚§ãƒ?‚¯
632                            switch( ch ) {
633                                    case 'K' : tani=1024L; break;
634                                    case 'M' : tani=1024L * 1024L ; break;
635                                    case 'G' : tani=1024L * 1024L * 1024L ; break;
636                                    default  : break;
637                            }
638                            if( tani > 0L ) {    // ã¤ã¾ã‚Šã?å˜ä½æ›ç®—ãŒè¡Œã‚れãŸå ´åˆã?
639                                    buf = buf.substring( 0,size-1 );                // 'K','M','G' ãŒå‰Šé™¤ã•ã‚ŒãŸæ–‡å­—å?
640                                    size--;                                                                 // ã“ã“ã§ç©ºæ–?­—å?ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã?
641                            }
642                            else {
643                                    tani = 1L;              // å˜ä½æ›ç®—ãŒãªã??åˆã?ã€?¼‘å?ã€?
644                            }
645                    }
646    
647                    if( size > 0 ) {
648                            // å…ˆã?å˜ä½æ›ç®—ã§ã€?L(=?‘å?)を設定ã—ã¦ã€if ã‚’ç„¡ãã—ãŸãŒã€long ã®æŽ›ã‘ç®—ãªã®ã§ã€ãªã‚“ã¨ãªã抵抗ãŒã‚ã‚‹ã€?
649                            rtn = tani * Long.parseLong( buf );                     // buf ã¯ã™ã§ã«æ•°å­—ã ã‘ã«ãªã£ã¦ã?‚‹ãƒã‚ºã€?
650                    }
651    
652                    return rtn ;
653            }
654    
655            /**
656             * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??æŒ?®šã?大ãã•より大ãã„ファイルã®å ´åˆã?スルー(鏿Š?ã•れã¾ã™ã?
657             *
658             * æŒ?®šã?ãƒã‚¤ãƒˆå˜ä½ã§ã™ãŒã€?*KB , **MB , **GB ãªã©ã®å˜ä½ã‚’付ã‘る事もå¯èƒ½ã§ã™ã?
659             * ç¾æ™‚点ã§ã¯ã€K , KB , M , MB , G , GB ã®ã¿æŒ?®šå¯èƒ½ã§ã™ã?
660             *
661             * @og.rev 5.7.4.3 (2014/03/28) isLarger,isSmaller属æ?を文字å?ã«å¤‰æ›´
662             *
663             * @param       slen    ファイルã®å¤§ãã•(ãƒã‚¤ãƒˆå˜ä½?。åŒå€¤ã‚’å«ã‚?
664             */
665    //      public void isLarger( final int len ) {
666    //              if( len >= 0 ) {
667    //                      list.add( new IsLargerFilter( len ) );
668    //              }
669    //      }
670            public void isLarger( final String slen ) {
671                    long len = getByteSize( slen );
672    
673                    if( len >= 0L ) {
674                            list.add( new IsLargerFilter( len ) );
675                    }
676            }
677    
678            /**
679             * æŒ?®šã?大ãã•より大ãã„ファイルã®å ´åˆã«é¸æŠžã•れる FileFilter インターフェースã®å®Ÿè£??部クラスã§ã™ã?
680             *
681             * @version  4.0
682             * @author   Kazuhiko Hasegawa
683             * @since    JDK5.0,
684             */
685            private static class IsLargerFilter implements FileFilter {
686                    private final long size ;
687    
688                    /**
689                     * 大ãã„ファイルフィルターオブジェクトを作æ?ã—ã¾ã™ã?
690                     *
691                     * @og.rev 5.7.4.3 (2014/03/28) isLarger,isSmaller属æ?ã‚’longã«å¤‰æ›´
692                     *
693                     * @param       len     ファイルã®å¤§ãã•(ãƒã‚¤ãƒˆå˜ä½?。åŒå€¤ã‚’å«ã‚?
694                     */
695    //              IsLargerFilter( int len ) {
696                    IsLargerFilter( final long len ) {
697                            size = len ;
698                    }
699    
700                    /**
701                     * FileFilter インターフェース㮠accept( File ) メソãƒ?ƒ‰
702                     *
703                     * @param       pathname        ファイルオブジェク�
704                     * @return      true:処ç?¯¾è±¡ / false:処ç?žå¯¾è±¡
705                     * @see java.io.FileFilter#accept( File )
706                     */
707                    public boolean accept( final File pathname ) {
708                            return pathname.length() >= size;
709                    }
710            }
711    
712            /**
713             * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??æŒ?®šã?大ãã•よりå°ã•ã?ƒ•ァイルã®å ´åˆã?スルー(鏿Š?ã•れã¾ã™ã?
714             * 引数ã?0以ä¸?マイナス) ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€?
715             *
716             * @og.rev 5.7.4.3 (2014/03/28) isLarger,isSmaller属æ?を文字å?ã«å¤‰æ›´
717             *
718             * @param    slen ファイルã®å¤§ãã•(ãƒã‚¤ãƒˆå˜ä½?。åŒå€¤ã‚’å«ã¾ãªã??
719             */
720    //      public void isSmaller( final int len ) {
721    //              if( len >= 0 ) {
722    //                      list.add( new IsSmallerFilter( len ) );
723    //              }
724    //      }
725            public void isSmaller( final String slen ) {
726                    long len = getByteSize( slen );
727    
728                    if( len >= 0L ) {
729                            list.add( new IsSmallerFilter( len ) );
730                    }
731            }
732    
733            /**
734             * æŒ?®šã?大ãã•よりå°ã•ã?ƒ•ァイルã®å ´åˆé¸æŠžã•れる FileFilter インターフェースã®å®Ÿè£??部クラスã§ã™ã?
735             *
736             * @version  4.0
737             * @author   Kazuhiko Hasegawa
738             * @since    JDK5.0,
739             */
740            private static class IsSmallerFilter implements FileFilter {
741                    private final long size ;
742    
743                    /**
744                     * å°ã•ã?ƒ•ァイルフィルターオブジェクトを作æ?ã—ã¾ã™ã?
745                     *
746                     * @og.rev 5.7.4.3 (2014/03/28) isLarger,isSmaller属æ?ã‚’longã«å¤‰æ›´
747                     *
748                     * @param    len ファイルã®å¤§ãã•(ãƒã‚¤ãƒˆå˜ä½?。åŒå€¤ã‚’å«ã¾ãªã??
749                     */
750    //              IsSmallerFilter( int len ) {
751                    IsSmallerFilter( final long len ) {
752                            size = len ;
753                    }
754    
755                    /**
756                     * FileFilter インターフェース㮠accept( File ) メソãƒ?ƒ‰
757                     *
758                     * @param       pathname        ファイルオブジェク�
759                     * @return      true:処ç?¯¾è±¡ / false:処ç?žå¯¾è±¡
760                     * @see java.io.FileFilter#accept( File )
761                     */
762                    public boolean accept( final File pathname ) {
763                            return pathname.length() < size;
764                    }
765            }
766    
767            /**
768             * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??ファイルã?hidden ã®å ´åˆã?スルー(鏿Š?ã•れã¾ã™ã?
769             * 引数ãŒtrueã®å ´åˆã?ã€hiddenファイルã®ã¿ã‚’é¸æŠžã—ã¾ã™ã?
770             * falseã®å ´åˆã?ã€hiddenãƒ•ã‚¡ã‚¤ãƒ«ä»¥å¤–ã‚’é¸æŠžã—ã¾ã™ã?(ã¤ã¾ã‚?hiddenファイルをブロãƒ?‚¯ã—ã¾ã™ã?)
771             * hidden をブロãƒ?‚¯ã—ãŸã??åˆã?ã€false を設定ã—ã€ã™ã¹ã¦é¸æŠžã—ãŸã„å ´åˆã?ã€filter設定をã—ãªã?º‹ã«ãªã‚Šã¾ã™ã?
772             * 引数ã?null ã®å ´åˆã?ã€è¿½åŠ?—ã¾ã›ã‚“ã€?
773             *
774             * @og.rev 5.7.5.0 (2014/04/04) æ–°è¦è¿½åŠ?
775             *
776             * @param       flag [true:/false]
777             */
778            public void isHidden( final String flag ) {
779                    isHidden( flag, false );                                // å転ã—ãªã?
780            }
781    
782            /**
783             * å†?ƒ¨åˆ¤å®šãƒ•ィルタ??ファイルã?hidden ã®å ´åˆã?スルー(鏿Š?ã•れã¾ã™ã?
784             * 引数ãŒtrueã®å ´åˆã?ã€hiddenファイルã®ã¿ã‚’é¸æŠžã—ã¾ã™ã?
785             * falseã®å ´åˆã?ã€hiddenãƒ•ã‚¡ã‚¤ãƒ«ä»¥å¤–ã‚’é¸æŠžã—ã¾ã™ã?(ã¤ã¾ã‚?hiddenファイルをブロãƒ?‚¯ã—ã¾ã™ã?)
786             * hidden をブロãƒ?‚¯ã—ãŸã??åˆã?ã€false を設定ã—ã€ã™ã¹ã¦é¸æŠžã—ãŸã„å ´åˆã?ã€filter設定をã—ãªã?º‹ã«ãªã‚Šã¾ã™ã?
787             * reverse = true ã«è¨­å®šã™ã‚‹ã¨ã€çµæžœã‚’å転ã•ã›ã¾ã™ã?
788             *
789             * @og.rev 5.7.5.0 (2014/04/04) æ–°è¦è¿½åŠ?
790             *
791             * @param       flag [true:/false]
792             * @param       reverse true:çµæžœã‚’å転ã™ã‚‹
793             */
794            public void isHidden( final String flag,final boolean reverse ) {
795                    if( flag != null ) {
796                            list.add( new IsHiddenFilter( flag,reverse ) );
797                    }
798            }
799    
800            /**
801             * ファイルã?hidden ã®å ´åˆã«é¸æŠžã•れる FileFilter インターフェースã®å®Ÿè£??部クラスã§ã™ã?
802             * 引数ãŒtrueã®å ´åˆã?ã€hiddenファイルã®ã¿ã‚’é¸æŠžã—ã¾ã™ã?
803             * falseã®å ´åˆã?ã€hiddenãƒ•ã‚¡ã‚¤ãƒ«ä»¥å¤–ã‚’é¸æŠžã—ã¾ã™ã?(ã¤ã¾ã‚?hiddenファイルをブロãƒ?‚¯ã—ã¾ã™ã?)
804             * hidden をブロãƒ?‚¯ã—ãŸã??åˆã?ã€false を設定ã—ã€ã™ã¹ã¦é¸æŠžã—ãŸã„å ´åˆã?ã€filter設定をã—ãªã?º‹ã«ãªã‚Šã¾ã™ã?
805             *
806             * @og.rev 5.7.5.0 (2014/04/04) æ–°è¦è¿½åŠ?
807             *
808             * @version  6.0
809             * @author   Kazuhiko Hasegawa
810             * @since    JDK6.0,
811             */
812            private static class IsHiddenFilter implements FileFilter {
813                    private final boolean  flg  ;
814                    private final boolean  rvse ;
815    
816                    /**
817                     * hiddenフィルターオブジェクトを作æ?ã—ã¾ã™ã?
818                     *
819                     * @param       flag    true:hiddenã®ã¿ / false:
820                     * @param       reverse true:çµæžœã‚’å転ã™ã‚‹
821                     */
822                    IsHiddenFilter( final String flag,final boolean reverse ) {
823                            flg  = Boolean.parseBoolean( flag );
824                            rvse = reverse;
825                    }
826    
827                    /**
828                     * FileFilter インターフェース㮠accept( File ) メソãƒ?ƒ‰
829                     *
830                     * @param       pathname        ファイルオブジェク�
831                     * @return      true:処ç?¯¾è±¡ / false:処ç?žå¯¾è±¡
832                     * @see java.io.FileFilter#accept( File )
833                     */
834                    public boolean accept( final File pathname ) {
835                            return (pathname.isHidden()  ^  !flg) ^ rvse ;
836                                    //  isHidden()          flg             !flg    rvse    â‡?çµæžœ
837                                    // ======================================================
838                                    //      true(hidden)    true    false   false   â‡?true   鏿Š?
839                                    //      true(hidden)    false   true    false   �false 除�
840                                    //      false(normal)   true    false   false   �false 除�
841                                    //      false(normal)   false   true    false   â‡?true   鏿Š?
842    
843                                    //      true(hidden)    true    false   true    �false 除�
844                                    //      true(hidden)    false   true    true    â‡?true   鏿Š?
845                                    //      false(normal)   true    false   true    â‡?true   鏿Š?
846                                    //      false(normal)   false   true    true    �false 除�
847                    }
848            }
849    
850            /**
851             * ã“ã?オブジェクトã?æ–?­—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
852             * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã?
853             *
854             * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?­—å?表ç¾
855             */
856            @Override
857            public String toString() {
858                    StringBuilder buf = new StringBuilder();
859                    int size = list.size();
860                    for( int i=0; i<size; i++ ) {
861                            buf.append( "no[" ).append( i ).append( "]=" );
862                            buf.append( list.get(i) ).append( "\n" );
863                    }
864    
865                    return buf.toString();
866            }
867    }
868    
869    /**
870     * ModifyFileFilter.java ã¯ã€æœ€çµ‚変更日付ã‘ã®ãƒ•ィルタークラスã§ã™ã?
871     *
872     * FileFilter インターフェースを継承ã—ã?ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã§æŒ?®šã?日付ã‘よりã‚?
873     * æœ?µ‚å¤‰æ›´æ—¥ä»˜ã‘ ãŒæ–°ã—ã„ファイルをã?é¸æŠžã—ã¾ã™ã?
874     * ã“ã?クラスã§ã¯ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¯ã€å¤‰æ›´æ—¥ä»˜ã‘ã«ç„¡é–¢ä¿‚ã«é¸æŠžã—ã¾ã™ã?
875     *
876     * 日付ã‘ã®æŒ?®šã«ã€YYYYMMDD å½¢å¼ã? ?˜æ–‡å­—数字文字å?以外ã«ã€TODAY ã‚?YESTERDAY ãªã©ã‚‚使用ã§ãã¾ã™ã?
877     * TODAY ã¯ã€å®Ÿè¡Œæ—¥ã® 00:00:00 を基準時刻ã¨ã—ã?YESTERDAY ã¯ã€ãã®å‰æ—¥ã«ãªã‚Šã¾ã™ã?
878     * ãƒãƒƒãƒå?ç?­‰ã§ã€å‰æ—¥åˆ??å†ç·¨æˆã‚„ã€å?月å?ã‚’å?ç·¨æˆã™ã‚‹å?åˆã«ã€å®Ÿæ—¥ä»˜ã‘を指定ã›ãšã«
879     * 使用ã§ãã¾ã™ã?
880     *
881     * ã“ã?実è£??åŒæœŸåŒ–ã•れã¾ã›ã‚“ã€?
882     *
883     * @version  4.0
884     * @author   Kazuhiko Hasegawa
885     * @since    JDK5.0,
886     */
887    class ModifyFileFilter implements FileFilter {
888            private final long modify ;
889    
890            /**
891             * コンストラクター
892             *
893             * 日付ã‘ã®æŒ?®šæ–¹æ³•ã«ã¯ã€å®Ÿæ—¥ä»˜ã‘(YYYYMMDDå½¢å¼?例ï¼?0040323)ã¨
894             * 仮想日付ã‘(TODAY,YESTERDAY ãªã©)ãŒæŒ‡å®šã§ãã¾ã™ã?
895             *
896             *     YYYYMMDD   YYYYMMDDå½¢å¼ã?æŒ?®šæ—¥ã® 00:00:00 を基準時刻
897             *     TODAY      実行日㮠00:00:00 を基準時刻
898             *     YESTERDAY  å®Ÿè¡Œæ—¥å‰æ—¥ã® 00:00:00 を基準時刻
899             *     LAST_WEEK  実行日ã®å…ˆé?(7æ—¥å‰? 00:00:00 を基準時刻
900             *     MONTH      実行月㮠1日 00:00:00 を基準時刻
901             *     LAST_MONTH å®Ÿè¡Œå‰æœˆã? åŒæ—¥ 00:00:00 を基準時刻
902             *     LAST_YEAR  実行å‰å¹´ã® åŒæœˆåŒæ—¥ 00:00:00 を基準時刻
903             *
904             * @og.rev 5.3.5.0 (2011/05/01) ?¢æ™‚ï½£ã®ã‚¯ãƒªã‚¢ãƒŸã‚¹ã®ä¿®æ­£
905             *
906             * @param value æŒ?®šæ—¥ä»˜ã‘
907             */
908            public ModifyFileFilter( final String value ) {
909                    if( value != null ) {
910                            Calendar cal = Calendar.getInstance();
911    
912    //                      cal.clear( Calendar.HOUR_OF_DAY );
913                            cal.set( Calendar.HOUR_OF_DAY, 0 );             // 5.3.5.0 (2011/05/01) 時間ã®è§£æ±ºè¦å‰‡ãŒé©ç”¨ã•れるãŸã‚ã??¢æ™‚ï½£ã?‘ã¯ã€setメソãƒ?ƒ‰ã§ 0 ã«ã‚»ãƒ?ƒˆã™ã‚‹ã€?
914                            cal.clear( Calendar.MINUTE );
915                            cal.clear( Calendar.SECOND );
916                            cal.clear( Calendar.MILLISECOND );
917    
918                            if( value.equalsIgnoreCase( "YESTERDAY" ) ) {
919                                    cal.add( Calendar.DATE, -1 );
920                            }
921                            else if( value.equalsIgnoreCase( "LAST_WEEK" ) ) {
922                                    cal.add( Calendar.DATE, -7 );
923                            }
924                            else if( value.equalsIgnoreCase( "MONTH" ) ) {
925                                    cal.set( Calendar.DATE, 1 );
926                            }
927                            else if( value.equalsIgnoreCase( "LAST_MONTH" ) ) {
928                                    cal.add( Calendar.MONTH, -1 );
929                            }
930                            else if( value.equalsIgnoreCase( "LAST_YEAR" ) ) {
931                                    cal.add( Calendar.YEAR, -1 );
932                            }
933                            else if( value.length() == 8 ) {
934                                    cal.set( Integer.parseInt( value.substring( 0,4 ) ) ,
935                                                     Integer.parseInt( value.substring( 4,6 ) ) - 1,
936                                                     Integer.parseInt( value.substring( 6,8 ) ) );
937                            }
938                            else if( ! value.equalsIgnoreCase( "TODAY" ) ) {
939                                    String errMsg = "ModifyFileFilter Error! modify Format [" + value + "]\n"
940                                                     + "日付ã‘ã®æŒ?®šæ–¹æ³•ã«ã¯ã€å®Ÿæ—¥ä»˜ã‘(YYYYMMDDå½¢å¼?例ï¼?0040323)㨠\n"
941                                                     + "仮想日付ã‘(TODAY,YESTERDAY ãªã©)ãŒæŒ‡å®šã§ãã¾ã™ã?\n"
942                                                     + "    YYYYMMDD   YYYYMMDDå½¢å¼ã?æŒ?®šæ—¥ã® 00:00:00 を基準時刻 \n"
943                                                     + "    TODAY      実行日㮠00:00:00 を基準時刻 \n"
944                                                     + "    YESTERDAY  å®Ÿè¡Œæ—¥å‰æ—¥ã® 00:00:00 を基準時刻 \n"
945                                                     + "    LAST_WEEK  実行日ã®å…ˆé?(7æ—¥å‰? 00:00:00 を基準時刻 \n"
946                                                     + "    MONTH      実行月㮠1日 00:00:00 を基準時刻 \n"
947                                                     + "    LAST_MONTH å®Ÿè¡Œå‰æœˆã? åŒæ—¥ 00:00:00 を基準時刻 \n"
948                                                     + "    LAST_YEAR  実行å‰å¹´ã® åŒæœˆåŒæ—¥ 00:00:00 を基準時刻 \n" ;
949                                    throw new RuntimeException( errMsg );
950                            }
951                            modify = cal.getTimeInMillis() ;
952                    }
953                    else {
954                            throw new RuntimeException( "ModifyFileFilter Error! modify valus is not null" );
955                    }
956            }
957    
958            /**
959             * FileFilter インターフェース㮠accept( File ) メソãƒ?ƒ‰
960             *
961             * @param       file    ファイルオブジェク�
962             *
963             * @return      true:処ç?¯¾è±¡ / false:処ç?žå¯¾è±¡
964             * @see java.io.FileFilter#accept( File )
965             */
966            public boolean accept( final File file ) {
967                    return file.isDirectory() || ( file.lastModified() >= modify ) ;
968            }
969    }