簡體   English   中英

比較文件列表和對象列表以刪除文件

[英]Compare files list to object List to delete files

我有一個計划列表,每個計划在(“ / web / managed /”)中都有一個PDF,刪除計划時我並未刪除文件,所以現在我想添加一個函數來刪除所有在我的計划列表中沒有ID。

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

對象列表:

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

然后我將從文件夾中獲取所有文件:

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

這是我的清除功能:

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

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

使用我的代碼:它將刪除我文件夾中的所有內容。 當我想將仍然具有ID的文件保留在其他列表中時。

如果我理解您的問題,那么應該可以:

    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++;
        }
    }

我想我看到了問題。 而不是在第二個循環中刪除問題,而是將布爾值設置為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM