Dateien löschen, außer...?

magic_halli

Erfahrenes Mitglied
Hi,

ich habe eine Funktion, die mir in einem bestimmten Verzeichnis alle pdf-Dateien löscht.
Code:
path = curSession.GetCurrentDirectory();
          find = ".pdf";
          File f = new File(path);
          File[] fileArray = f.listFiles();
          if(fileArray != null){
             for(int i=0;i<fileArray.length;i++){
                if(fileArray[i].getName().indexOf(find) != -1){

                   //hier noch der Filter, ob Doku, Angebot oder Freigabe im Namen vorhanden
                   //...wenn nicht, dann Datei löschen
                   fileArray[i].delete();

                }
             }
          }

Die Dateinnamen sehen immer so aus: blabla__blub.pdf

Ich möchte aber nicht restlos alle Dateien löschen. Es sollen diejenigen erhalten bleiben, wo das blub entweder Doku, Freigabe oder Angebot heißt.
Wie kann ich hier so einen Filter einbringen, dem auch noch Groß- und Kleinschreibung egal sind?

Danke.
 
Du hast eine nahezu gleiche Frage neulich schonmal gestellt. Ich würde mir ein wenig Eigenarbeit von dir wünschen, denn die Lösung ist fast identisch:

Java:
    File directory = new File(dir);
File [] pdfList = directory.listFiles(new FilenameFilter(){

  //Nur Dateien mit Endung .pdf akzeptieren
  //Welche nicht Doku, Angebot oder Freigabe enthalten
  public boolean accept(File dir, String filename) {
    //in grossbuchstaben umwandeln..
    String bigName = filename.toUpperCase( );
    if(bigName.endsWith(".PDF")){
        return !(bigName.contains("DOKU") || bigName.contains("ANGEBOT") ||bigName.contains("FREIGABE"));
    }
    return false;
  }
  
});

//Alle gefundenen Dateien löschen
for(File file : pdfList ){
    file.delete( );
}
 
Zuletzt bearbeitet:
Danke für Deine Antwort.
Nur leider gibts die Methode contains() bei einem String bei mir nicht! Ich bekomme nach dem Punkt-Operator sämtliches andere Zeugs angezeigt, aber kein contains.

Äh, sorry... aber hab ich echt dieser Tage schonmal so eine ähnliche Frage gestellt? Kann mich echt nicht dran erinnern - stell doch mal den Link zum Post bitte hier rein!

Danke und Gruß.
 
Danke für Deine Antwort.
Nur leider gibts die Methode contains() bei einem String bei mir nicht! Ich bekomme nach dem Punkt-Operator sämtliches andere Zeugs angezeigt, aber kein contains.
dann nimmt indexOf()!=-1, contains() gibts ab Java 1.5.

Oder wenn dus ganz ordentlich machen willst (siehe Toms Post) nimm den String zwischen letztem "_" und letztem Punkt (jeweils mit lastIndexOf()) und prüfe den mit equalsIgnoreCase().
Äh, sorry... aber hab ich echt dieser Tage schonmal so eine ähnliche Frage gestellt? Kann mich echt nicht dran erinnern - stell doch mal den Link zum Post bitte hier rein!
Files löschen - ausser eines?!

Das ist aber gefährlich... was passiert wenn eine Datei namens:
doku_aufjedenfalllöschen.pdf im Verzeichnis liegt?

Besser wärs den String(.toUpperCase()) zu prüfen der zwischen dem "_" und dem letzten "." liegt.
Sicher.. weiss ich auch. Aber ein wenig selber nachdenken sollte schon noch drin sein. Für rundum glücklich Pakete fühle ich mich nicht ganz zuständig....
 
Hallo,

ich komme hier nicht in Schwierigkeiten mit dem Löschen, da eine solche Konstellation wie z.B. doku__aufjedenfalllöschen.pdf nicht existieren kann - firmeninterne Richtlinie!
Ich habe das jetzt mit indexOf() probiert - geht aber irgendwie nicht:
Code:
String find2 = "doku";
String find3 = "freigabe";
String find4 = "angebot";
...
for(int i=0;i<fileArray.length;i++){
     if((fileArray[i].getName().indexOf(find2) == -1) || (fileArray[i].getName().indexOf(find3) == -1) || (fileArray[i].getName().indexOf(find4) == -1)){
     System.out.println(fileArray[i].getName().toString());
     fileArray[i].delete();
     }
}
Obwohl in dem fileArray Einträge mit "doku" vorhanden sind, werden diese einfach mit gelöscht! In der Ausgabe sehe ich auch noch die entsprechenden Eintragungen, dass sie vorhanden sind und eigentlich nicht gelöscht werden sollten!
Wenn ich nur nach einer Bedingung abfrage, also:
Code:
...
for(int i=0;i<fileArray.length;i++){
     if(fileArray[i].getName().indexOf(find2) == -1){
     System.out.println(fileArray[i].getName().toString());
     fileArray[i].delete();
     }
}
...dann wird dieser Eintrag nicht mit gelöscht, nur sobald ich, wie oben, 3 Bedingungen mit oder verknüpfe, wird das irgendwie ignoriert!
Wieso das denn?
 
So, das Ding is gelöst...

Ich hab den Wald vor lauter Logik nicht mehr gesehen... meine Abfrage muss natürlich UND verknüpft sein! :-(
(Die Logik nach dem Wochenende ist ein hartes Brot :) )

Gruß und Danke.
 
Zurück