a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 135|回复: 0

[其他] java认证:关于FileFilter使用的经验之谈

[复制链接]
发表于 2012-8-4 12:28:23 | 显示全部楼层 |阅读模式
现在要求输入一个文件的目录,之后将里面所有的备份文件删除,备份文件都是以“.bak”或".BAK"结尾$ ^* i; n! _% a3 j9 E0 X' q) v/ C
  package TestFile;- e/ Y! y: e- T$ `: \
  import java.io.File;
3 g8 c  j' G& w8 E  p8 z* I9 e  import java.io.FileFilter;2 z1 I4 ]/ s; Q" l* i
  /**
7 a+ r! C# u( ]9 R' `  *
# V' P0 Z2 z* F% K5 T+ |- ]  [  * 用于过滤以.bak结尾或包含.bak的文件- ?2 B2 [4 n3 b7 L  _
  * 返回值的含义是 当包含该字符串时返回true
/ b7 ~- g4 c& |/ A& B1 n, J! g  */
3 e4 |" z4 l2 W4 d( A5 g& a  public class ListFilter implements FileFilter{  K, @* j, p1 Y" B7 S& q; l6 {
  @Override, v# u. m8 C: \
  public boolean accept(File file) {
2 g5 d& o) H; D; a  //测试指定的文件(夹)是否应该包含在指定的列表中(就是测定作为过滤的条件是否满足)4 s% d' P6 r  o; z, w
  /*
/ \7 ~% f4 m' k# ]( i( c  * 如果是目录的话,直接返回true 表示是满足条件的一情况
( @) K3 N1 j, V# |' c- l  O  */9 ^$ x! e+ _% P1 S* W
  if(file.isDirectory()) return true;
: O; g$ T( n: c, z# y8 O  /*6 w6 p& p4 P5 Y# Q0 B$ ~: |
  * 如果不是目录的话,通过判断在其名字里是否含有规定的字符,7 ^+ I8 k" C2 m% C3 }" I( E: [/ f
  * 因为string的index方法在不满足条件(不含有指定的字符)是返回-1& n" F# O$ p3 W8 ~1 N* I2 d" N
  * 所以以此来确定是否满足条件
+ i. v. l/ X  O- F2 A: s" ?8 b  */; S( `. T' {$ C9 q4 R- }7 v
  String name=file.getName();
5 k  A* i* z8 j7 V2 [4 k  /*: {9 {1 V% x1 C6 G
  * int index=name.indexOf(".bak");
9 X8 Y3 W& _) A% i+ s3 A  * return index!=-1;' w2 \2 p% P2 Y0 t- t
  * 这种方法不安全,可能会删除文件名中还含有.bak的文件,备份文件还可以用.BAK结尾
+ }$ B5 `4 O( ~  */
* @8 o% c( h2 e8 |, x% U  n% C  return name.endsWith(".bak")||name.endsWith(".BAK");4 I. R$ f; ]7 t# R/ o
  }& b; o3 o; T& B( E9 O: p' R
  }
1 G" v& M: Z6 i9 @' C( w7 @  使用此类
" p/ G* t1 i# a! y7 k  package TestFile;/ y9 `) j; [5 J7 T
  import java.io.File;
( ^; b( X) y6 _8 c. J7 V  `  /**9 ]% W/ z/ H7 ^* D+ t
  * @author Administrator( e+ d  M6 N! b* C9 T- ]4 m7 S
  * 涉及到递归调用
# I+ f6 K' `+ g, a  */
. B2 M& d2 f* l. Q$ ^) E+ P. M9 k6 }0 y  public class BakDelete{' H8 U5 _! L! g# ]" d7 y# X3 D
  public static void main(String args){
( c5 u6 r3 @8 ?9 M* Z  BakDelete bd=new BakDelete();
# A+ i/ d3 \- Y3 D  bd.listBakFile(new File("E:“"));( w0 R& }! s& {9 t
  }( U- S3 @) j2 V+ z8 V. l
  public void listBakFile(File file){  J* a4 a2 T' m
  File fs=file.listFiles(new ListFilter());
8 ?$ _7 U+ x' m: j( A: r  for(int i=0;i
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-9-27 21:17 , Processed in 0.346346 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表