[英]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.