0

我写了一个条件,它必须在目标文件夹中查找,并且必须删除 .zip 扩展名类型的文件以及那些以文件名可能为 abcd_edf_tyu454656 的名称开头的文件,例如 'abcd_edf' 模式。 zip 但它还必须确保此类 zip 文件不是在 7 天前创建的,如果它们使用模式“abcd_edf”并且是 zip 类型并且是在 7 天前创建的,那么它应该被删除下面是解决方案我来了,但它不起作用,请告知其中有什么问题..

if (c.isDirectory()) {
                final File[] files = c.listFiles();
                long currentTime = System.currentTimeMillis();

                for (int i = 0; i < files.length; i++) {
                    //if (currentTime - files[i].lastModified() > 1000 * 60 * 60* 24 * 7)
                      String fileName = files[i].getName();

                           if(fileName.matches("abcd_edf*\\.zip") && currentTime - files[i].lastModified() > 1000 * 60 * 60* 24 * 7) 
                           {
                                                       files[i].delete();
                           }

                }

            }
4

2 回答 2

2

if您应该在时间检查 之后添加大括号

final long week = 1000 * 60 * 60* 24 * 7;
for (int i = 0; i < files.length; i++) 
{
   if (currentTime - files[i].lastModified() > week )
   {
       String fileName = files[i].getName();
       if(fileName.matches("abcd_edf*\\.zip")) 
       {
            files[i].delete();
       }
   } 
}
于 2013-09-14T09:29:38.230 回答
2

调整正则表达式以匹配表达式:

if(fileName.matches("abcd_edf.*\\.zip")

abcd_edf匹配字符串文字

.*匹配 0 到 n 次出现的任何字符

\\.zip匹配文字 .zip

目前,正则表达式正在寻找 0 到 n 次出现的 ,f但是它应该寻找 0 到 n 次出现的任何字符,用.. 量词*被应用于当前表达式中的前一个字符,从而导致问题。密切注意第二个测试,它通过了说明当前正则表达式的行为。

public static void main(String[] args) {
    String fileName = "abcd_edf.zip";
    String fileName1 = "abcd_edfffffff.zip";
    String fileName2 = "abcd_edf_somethingelse.zip";



    System.out.println(fileName.matches("abcd_edf*\\.zip")); //prints true
    System.out.println(fileName1.matches("abcd_edf*\\.zip")); //prints true
    System.out.println(fileName2.matches("abcd_edf*\\.zip")); //prints false

    System.out.println(fileName.matches("abcd_edf.*\\.zip")); //prints true
    System.out.println(fileName1.matches("abcd_edf.*\\.zip")); //prints true
    System.out.println(fileName2.matches("abcd_edf.*\\.zip")); //prints true
}
于 2013-09-14T09:35:52.280 回答