将文件列表与对象列表进行比较以删除文件

时间:2017-12-01 16:39:41

标签: java

我有一份计划清单,每个计划都有一个PDF格式(" / web / managed /") 我删除计划时没有删除文件,所以现在我尝试添加一个函数来删除计划列表中没有id的所有文件。

文件名始终具有ID。 示例:6365_Test-LVLD.pdf

对象列表:

cabal-install

然后我将从我的文件夹中获取所有文件:

@Transaction
public List<StorePlan> getPlans() {
     List<StorePlan> list = getCurrentSession().createCriteria(StorePlan.class).list();
     return list;
}

这是我的清除功能:

protected File[] getPDFs() {
    return new File("/web/managed/").listFiles();
}

使用我的代码:它会删除我文件夹中的所有内容。当我想保留其他列表中仍有id的文件时。

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,那么这应该有效:

    List<Integer> planIds = Lists.newArrayList();   

    for(StorePlan plan : storePlanDao.getPlans()){
        planIds.add(plan.getId());
    }

    for (File file : getPDFs()) {
        Integer planFileId = Integer.valueOf(file.getName().substring(0, 4))
        if(!ids.contains(planFileId)) {
            file.delete();
            count++;
        }
    }

答案 1 :(得分:1)

我想我看到了问题。它没有在第二个循环中删除问题,而是将布尔值设置为true并突破循环。在第二个循环之外有一个if语句,如果为true,则删除该文件。所以:

protected void getPlanIds() {
int count = 0;
for(StorePlan plan : storePlanDao.getPlans()) {
    Boolean found = false;
    for (File file : getPDFs()) {
        String  planFileId = file.getName().substring(0, 4);

        if(plan.getId() == Integer.valueOf(planFileId)) {
            found = true;
            break;
        } else {
           count++;
        }
    }
    if (!found) {
        file.delete();
    }
}   
}

我为格式错误道歉。我在移动办公,并在工作时间。的xD