2017-12-01 3 views
0

ファイルを削除するためにリストをobjectに、ファイルリストの比較、各プランは、私は計画を削除すると、私は今、ファイルを削除していなかった (「/ウェブ/管理/」)で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を持つファイルを保持したい場合。

答えて

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

はい!それは...たくさんありがとう! – Samarland

+0

あなたは大歓迎です! – isaace

1

私は問題を参照してくださいと思います。 2番目のループ内で問題を削除する代わりに、ブール値をtrueに設定してループから抜け出します。 2番目のループの外側にif文があり、trueの場合はファイルが削除されます。 So:

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

関連する問題