Hallo ich habe ein kleines Problem. In einem Verzeichnis liegen Dateien, diese Dateien können vom Vormonat sein. Bevor die neuen Dateien ins Verzeichnis kopiert werden, sollen die Dateien vom Vormont gelöscht werden. Die Dateinamen sind gleich und unterscheiden sich nur im Datum. Leider werden immer alle Dateien gelöscht, was mache ich falsch ?Anbei mal der Sourcecode.
Dazu gehört noch :
Java:
/**
* Löscht aus dem Auspack-Verzeichnis und aus dem Instituts-Zielverzeichnis
* alle alten Dateien.
* Alte Dateien sind alle aus dem letzten Monat.
*
*/
public void deleteOldKagFiles(){
// Calendar kalenderHeute = Calendar.getInstance();
// int aktuellerMonat = kalenderHeute.get(Calendar.MONTH); //es wird von 0 aus gezählt!
Calendar dateidatum = Calendar.getInstance();
Calendar referenzdatum = Calendar.getInstance();//an diesem Datum wird gemessen, wie alt eine Datei ist
//morgen ein Monat zurück, Null Uhr
referenzdatum.add(Calendar.MONTH, -1);
referenzdatum.add(Calendar.DAY_OF_MONTH, 1);
referenzdatum.set(Calendar.HOUR_OF_DAY,0);
referenzdatum.set(Calendar.MINUTE,0);
referenzdatum.set(Calendar.SECOND,0);
int anzahlMandanten=0;
String regexpression = "\\{kuerzel\\}";
String t_institutPath =null;
File curDir=null;
File tmpUnpackDirectory=null;
boolean result=false;
LinkedList<File> allFiles = new LinkedList<File>();
Iterator<File> fileIterator;
File sourceFile;
SimpleDateFormat aSimpleDateFormat = new SimpleDateFormat("dd.MM.yyyy");
//SimpleDateFormat aSimpleDateFormat2 = new SimpleDateFormat("MMMMM");
try {
prgLog.info("Suche im Auspackverzeichnis alte Dateien.");
} catch (Exception e) {
System.err.println("Logging unmoeglich");
}
// lege temp. Auspackverzeichnis an, wenn es noch nicht existiert
tmpUnpackDirectory = new File(propertyKagTmpUnpacking);
if(!tmpUnpackDirectory.exists()){
try {
prgLog.info("temp. Verzeichnis anlegen:" +propertyKagTmpUnpacking);
} catch (Exception e) {
System.err.println("Logging unmoeglich");
}
result=tmpUnpackDirectory.mkdir();
if(!result){
try {
prgLog.error("Fehler beim anlegen des temp. Verzeichnis");
prgLog.info("Programm wird wegen Fehler beendet.");
} catch (Exception e) {
System.err.println("Logging unmoeglich");
}
System.exit(-1);
}
}
//----------------------------------------------------
// Zuerst im Auspackverzeichnis löschen
// Alle Dateien in Liste speichern
//allFiles = (LinkedList)FileUtils.listFiles(tmpUnpackDirectory, new WildcardFileFilter("*.*",IOCase.SYSTEM),null);
allFiles = getFileList(tmpUnpackDirectory, new DateFileFilter(referenzdatum.getTimeInMillis(),DateFileFilter.OLDER));
if(allFiles.size()>0){
fileIterator = allFiles.iterator();
while(fileIterator.hasNext()){
sourceFile = (File)fileIterator.next();
//dateidatum.setTimeInMillis(sourceFile.lastModified());
// alte löschen
//if(dateidatum.get(Calendar.MONTH)<aktuellerMonat){
try{
try {
prgLog.info("Lösche ["+sourceFile.getName()+"] Dateidatum:"+aSimpleDateFormat.format(dateidatum.getTime()));
} catch (Exception e) {
System.err.println("Logging unmoeglich");
}
myIOUtils.forceDelete(sourceFile);
}catch(IOException ioe){
try {
prgLog.warn("Fehler beim Löschen von ["+sourceFile.getName()+"] Dateidatum:"+ioe.getMessage());
} catch (Exception e) {
System.err.println("Logging unmoeglich");
}
}
//}
}//while
}
//----------------------------------------------------
// Jetzt im Instituts-Zielverzeichnis löschen
if(propertyKagInstitutDestinationUse){
try {
prgLog.info("Suche im Institutszielverzeichnis alte Dateien.");
} catch (Exception e) {
System.err.println("Logging unmoeglich");
}
// pfad zusammenbauen aus Mandanten
anzahlMandanten=allMandanteninTar.size();
for (int x=0;x<anzahlMandanten;x++){
t_institutPath = propertyKagDestinationPath;
t_institutPath = t_institutPath.replaceFirst(regexpression, allMandanteninTar.get(x).substring(0, 5));
curDir=new File(t_institutPath);
if(!curDir.exists()){
try {
prgLog.warn("Kag-Verzeichnis wird neu erstellt: "+t_institutPath);
} catch (Exception e) {
System.err.println("Logging unmoeglich");
}
result=curDir.mkdir();
if(!result){
try {
prgLog.warn("Fehler beim anlegen des Kag-Verzeichnis "+t_institutPath);
prgLog.warn("Mandant wird übersprungen.");
} catch (Exception e) {
System.err.println("Logging unmoeglich");
}
continue;
}
}
//allFiles = (LinkedList)FileUtils.listFiles(curDir, new WildcardFileFilter("*.*",IOCase.SYSTEM),null);
allFiles = getFileList(curDir, new DateFileFilter(referenzdatum.getTimeInMillis(),DateFileFilter.OLDER));
if(allFiles.size()>0){
fileIterator = allFiles.iterator();
while(fileIterator.hasNext()){
sourceFile = (File)fileIterator.next();
dateidatum.setTimeInMillis(sourceFile.lastModified());
//if(dateidatum.get(Calendar.MONTH)<aktuellerMonat){
try{
try {
prgLog.info("Lösche ["+sourceFile.getName()+"] Dateidatum:"+aSimpleDateFormat.format(dateidatum.getTime()));
} catch (Exception e) {
System.err.println("Logging unmoeglich");
}
myIOUtils.forceDelete(sourceFile);
}catch(IOException ioe){
try {
prgLog.warn("Fehler beim Löschen von ["+sourceFile.getName()+"] Dateidatum:"+ioe.getMessage());
} catch (Exception e) {
System.err.println("Logging unmoeglich");
}
}
//}
}//while
}
}
}
}
Dazu gehört noch :
Java:
import java.io.File;
import java.io.FileFilter;
import java.util.Date;
/**
* Filtert nur die Dateien heraus, die mit dem angegebenen Mandanten beginnen.
*
*/
public class DateFileFilter implements FileFilter {
private long refdate=0;
private int status=0;
public static final int OLDER=1;
public static final int NEWER=2;
public static final int OLDER_OR_EQUALS=3;
public static final int NEWER_OR_EQUALS=4;
public static final int EQUALS=5;
public DateFileFilter(Date refdate, int status){
this.refdate=refdate.getTime();
this.status=status;
}
public DateFileFilter(long refdate, int status){
this.refdate=refdate;
this.status=status;
}
public boolean accept(File aFile) {
long filedate=aFile.lastModified();
boolean result=true;
if(aFile.isDirectory())
result=false;
switch (status){
case OLDER:
if(filedate<refdate) result=true;break;
case NEWER:
if(filedate>refdate) result=true;break;
case NEWER_OR_EQUALS:
if(filedate>=refdate) result=true;break;
case OLDER_OR_EQUALS:
if(filedate<=refdate) result=true;break;
case EQUALS:
if(filedate==refdate) result=true;break;
}
return result;
}
}