使用Java删除具有相同前缀字符串的文件


问题内容

我的目录中有大约500个文本文件,文件名中都带有相同的前缀dailyReport_

文件的后半部分是文件的日期。(例如dailyReport_08262011.txtdailyReport_08232011.txt

我想使用Java过程删除这些文件(我可以使用shell脚本,然后在crontab中将其添加为作业,但该应用程序是供外行使用的)。

我可以使用类似的方法删除一个文件

        try{
          File f=new File("dailyReport_08232011.txt");
          f.delete();
        }
        catch(Exception e){ 
                System.out.println(e);
        }

但是我可以删除具有特定前缀的文件(例如:dailyReport08第8个月)吗,我可以使用轻松在shell脚本中执行此操作rm -rf dailyReport08*.txt

但是File f=new File("dailyReport_08*.txt");在Java中不起作用(如预期的那样)。

现在, 如果不运行循环 来搜索目录中的文件,在Java中 是否有 可能实现?

我可以使用一些类似于*Shell脚本的特殊字符来实现此目的吗?


问题答案:

不,你不能。Java是相当低级的语言(与shell脚本相比),因此必须更加明确地执行此类操作。您应该使用folder.listFiles(FilenameFilter)搜索带有所需掩码的文件,然后遍历返回的数组以删除每个条目。像这样:

final File folder = ...
final File[] files = folder.listFiles( new FilenameFilter() {
    @Override
    public boolean accept( final File dir,
                           final String name ) {
        return name.matches( "dailyReport_08.*\\.txt" );
    }
} );
for ( final File file : files ) {
    if ( !file.delete() ) {
        System.err.println( "Can't remove " + file.getAbsolutePath() );
    }
}