Files löschen - ausser eines?!

magic_halli

Erfahrenes Mitglied
Hi,

ich will am Ende meiner Programmabarbeitung alle *.pdf-Files aus einem Verzeichnis löschen - AUSSER eines! Dieses eine File ist IMMER mit Abstand das größte pdf-File im Verzeichnis - und das soll da bleiben.
Hier ist meine Funktion zum löschen der Files allgemein:
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){
                   fileArray[i].delete();
                }
             }
          }
1. Nur wie kann ich dem beibringen, das alle, ausser das größte File im Verzeichnis gelöscht werden sollen?

oder ein anderer Ansatz:
2. Ich kenne den genauen Dateinamen des Files und kann den in die Funktion übergeben. Wie kann ich alles löschen, ausser das eine bekannte File? (ist vielleicht besser so?!)


Danke.
 
Arrrg, manchmal seh ich echt den Wald vor lauter Bäumen nicht...:suspekt:

Ich übergebe einfach meiner Funktion den Filename, der mir bekannt ist, und prüfe den noch mit ab - so einfach kanns manchmal sein!

So siehts nun aus und klappt auch:
Code:
if((fileArray[i].getName().indexOf(find) != -1) & if((fileArray[i].getName().indexOf(find) != -1) & (fileArray[i].getName().equals(pdfname+".pdf") == false)){
          fileArray[i].delete();
}

Gruß.
 
Ich würde die empfehlen die Files direkt beim erstellen der Liste zu filtern:

Java:
public static void deleteAllButBiggest(String dir){
    File directory = new File(dir);
    File [] pdfList = directory.listFiles(new FilenameFilter(){

      //Nur Dateien mit Endung .pdf akzeptieren
      public boolean accept(File dir, String filename) {
        return filename.endsWith(".pdf");
      }
      
    });
    
    //Größte Datei suchen
    long maxLength = -1;
    String biggestFileName = "";
    for(File file : pdfList ){
      if(file.length( ) > maxLength){
        biggestFileName = file.getName( );
        maxLength = file.length( );
      }
    }
    
    //Alle Dateien bis auf die größte löschen
    for(File file : pdfList ){
      if(!file.getName( ).equalsIgnoreCase(biggestFileName)){
        file.delete( );
      }
    }
}
 
Hallo!

Eine etwas "kürzere/flexiblere" Möglichkeit wäre:
Java:
/**
 * 
 */
package de.tutorials;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * @author Thomas.Darimont
 * 
 */
public class BiggestFileFilter {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		File file = new File("S:/tools/eclipse/plugins");
		File[] zipFiles = file.listFiles(new FilenameFilter() {
			public boolean accept(File dir, String name) {
				return name.endsWith(".jar");
			}
		});

		List<File> zipFileList = new ArrayList<File>(Arrays.asList(zipFiles));
		System.out.println("[" + zipFileList.size() + "]" + zipFileList);
		System.out.println("#################");

		File biggestFile = Collections.max(zipFileList, new Comparator<File>() {
			public int compare(File theFile, File theOtherFile) {
				return (int) (theFile.length() - theOtherFile.length());
			}
		});
		System.out.println("Biggest file is: " + biggestFile + " with: "
				+ biggestFile.length() + " bytes");
		System.out.println("#################");
		zipFileList.remove(biggestFile);
		System.out.println("[" + zipFileList.size() + "]" + zipFileList);

		CollectionExtensions.forAll(zipFileList, new ICommand<File>() {
			public void execute(File argument) {
				System.out.println("Deleting file: " + argument);
				//argument.delete()
			}
		});

	}

	static class CollectionExtensions {
		public static <T> void forAll(Collection<T> collection,
				ICommand<T> command) {
			for (T element : collection) {
				command.execute(element);
			}
		}
	}

	static interface ICommand<T> {
		void execute(T argument);
	}
}

Gruß Tom
 
Zurück