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 }