2017-12-01 3 views
0

Ich habe eine Liste von Plänen, jeder Plan hat ein PDF in ("/ web/managed /") Ich löschte die Dateien nicht, wenn ich den Plan lösche, also jetzt Ich versuche, eine Funktion hinzuzufügen, um alle Dateien zu löschen, die nicht die IDs in meiner Planliste haben.Vergleichen Sie die Liste der Dateien mit dem Objekt Liste, um die Dateien zu löschen

Dateiname hat immer die ID. Beispiel: 6365_Test-LVLD.pdf

Liste des Objekts:

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

dann werde ich alle Dateien aus meinem Ordner erhalten:

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

hier meine Spülfunktion ist:

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

mit meinem Code: Es wird alles aus meinem Ordner löschen. wenn ich die Dateien behalten möchte, die noch IDs in der anderen Liste haben.

Antwort

1

Wenn ich Ihre Frage verstehe dann sollte diese Arbeit:

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

Ja! das funktioniert ... vielen Dank! – Samarland

+0

Gern geschehen! – isaace

1

Ich denke, dass ich das Problem zu sehen. Anstatt das Problem innerhalb der zweiten Schleife zu löschen, muss ein Boolean auf true gesetzt werden und aus der Schleife ausbrechen. Außerhalb der zweiten Schleife gibt es eine if-Anweisung, die die Datei löscht, falls sie wahr ist. Also:

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(); 
    } 
} 
} 

Ich entschuldige mich für die schlechte Formatierung. Ich bin mobil und verbringe Zeit bei der Arbeit. xD

Verwandte Themen