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 }