我有一份计划清单,每个计划都有一个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的文件时。
答案 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