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

2022-09-01 02:47:13

我在一个目录中有大约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);
}

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

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

现在,在Java中是否可以在不运行循环来搜索目录中查找文件的情况下实现类似的操作?

我可以使用一些类似于shell脚本中使用的特殊字符来实现这一点吗?*


答案 1

不能。Java是相当低级的语言 - 与shell脚本相比 - 所以这样的事情必须更明确地完成。您应该使用 folder.listFiles(文件名过滤器)搜索具有所需掩码的文件,并循环访问返回的数组以删除每个条目。喜欢这个:

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() );
    }
}

答案 2

您可以使用循环

for (File f : directory.listFiles()) {
    if (f.getName().startsWith("dailyReport_")) {
        f.delete();
    }
}

推荐