我写了一个条件,它必须在目标文件夹中查找并且必须删除类型为.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();
}
}
}
答案 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
}