删除某种模式类型的zip文件

时间:2013-09-14 09:26:17

标签: java file

我写了一个条件,它必须在目标文件夹中查找并且必须删除类型为.zip的操作系统的文件以及那些以“abcd_edf”模式开头的文件名为文件名的文件可以abcd_edf_tyu454656.zip但它也必须确保这样的zip文件不是 如果他们正在使用模式'abcd_edf'并且是zip类型并且在七天之前创建,那么它应该被删除 下面是我来的解决方案,但它不起作用请告知它有什么问题..

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

                }

            }

2 个答案:

答案 0 :(得分: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();
       }
   } 
}

答案 1 :(得分: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
}