FileFilter

Fleur de Soleil

Aktives Mitglied
Hallo zusammen ich bin es mal wieder,

habe aktuell ein Problem mit einem FileFilter und dem JFileChooser. Im FileChooser habe ich eingestellt, dass ich nur Ordner öffnen kann. Innerhalb dieser Ordner soll er mir dann nur die Files mit der passenden Endung raussuchen und diese in einer JList auflisten. Leider klappt der FileFilter so nicht. Ich hoffe ihr könnt mir helfen.

Java:
 responseFilter = new FileFilter() {

			public boolean accept(File file) {
				return file.getName().toLowerCase().endsWith(responseSuffix);
			}

			public String getDescription() {
				return "Response-Datei(*_4_response.xml)";
			}
		};

Java:
 	class FileListener implements ActionListener{

		public void actionPerformed(ActionEvent evt) {
			if(evt.getSource()==view.getResponseSourceButton()){
				fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
				fileChooser.setDialogTitle("Quellordnern");
				value = fileChooser.showOpenDialog(view);
			}
			
			if(value == JFileChooser.APPROVE_OPTION){
				sourceFile = fileChooser.getSelectedFile();
				innerSourceFiles = sourceFile.listFiles();
				for (int i = 0; i < innerSourceFiles.length; i++){
					if(innerSourceFiles[i].isFile()){
						view.getSourceListModelResponse().addElement(innerSourceFiles[i].getName());
					}
				}
			}
		}
	}

LG Fleur
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
kein Gespür für die offensichtlichen Fragen die ein solches Posting ergeben?
- was funktioniert eigentlich nicht, wird zuviel angezeigt, zu wenig, sonstige Fehler
- was ist responseSuffix, sieht man gar nicht
- wie wird der fileChooser definiert, bekommt der überhaupt den FileFilter
- -> kein sauberes einfaches vollständiges tolles Testprogramm gepostet
- was passiert nun, offensichtlich sollten ja alle Files in der accept-Methode landen, da kannst du sie ausgeben,
die Berechnung deines booleans bis ins allerletzte Detail verfolgen

es ist doch so leicht..

Java:
public class Test {
    public static void main(String[] args) {
        final String responseSuffix = "png";
        FileFilter responseFilter = new FileFilter() {
                public boolean accept(File file)  {
                    System.out.println("file: " + file.getName().toLowerCase());
                    return file.getName().toLowerCase().endsWith(responseSuffix);
                }
                public String getDescription()   {
                    return "Response-Datei(*_4_response.xml)";
                }
            };
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileFilter(responseFilter);
        fileChooser.showOpenDialog(null);
    }
}
zeigt bei mit nur png-Dateien, die anderen nicht, im Log sind alle enthalten,
da es bei mir auf Anhieb funktioniert kann ich in der accept-Methode gar nicht viel mehr versuchen

edit:
> Im FileChooser habe ich eingestellt, dass ich nur Ordner öffnen kann.
na das kann wirklich dem Ziel entgegenstehen, nur Ordner, dann gibts gar keine Dateien, oder?
da bringt der Rest meines schönen Postings dann nicht mehr so viel..

du musst wohl in deinem Filter individuell Verzeichnisse filtern wenn es nötig ist, und später dann nicht mehr, hmm..,
oder nur Verzeichnisse + eine Art Dateiendung zulassen?
 
Zuletzt bearbeitet von einem Moderator:

Fleur de Soleil

Aktives Mitglied
Danke und sry, dass ich mich nicht deutlich genug ausgedrückt habe. Mein Problem besteht darin, dass ich einen Ordner auswählen möchte und innerhalb von diesem Ordner dann nur die Dateien mit der Endung "_4_response.xml" weiterverwenden möchte, zum Beispiel in meiner JList ausgeben. Wenn mein FileChooser erfolgreich geschlossen wurde ist mein ausgewählter Ordner in der Variable sourceFile gespeichert. Dann lese ich mir alle Files in diesem Ordner in das File-Array innerSourceFiles. In der for-Schleife soll er dann nur die Elemente aus dem Array nehmen, die zum einen ein File sind (keine Unterordner) und zum anderen eben dem FileFilter entsprechen. Ich hoffe das war verständlich.

Was das kompilierbare Beispiel angeht. Hoffe es geht auch ohne, werde natürlich eins zusammenstellen wenn es unbedingt notwendig ist.

LG Fleur
 
S

SlaterB

Gast
wie über edit zuletzt noch eingefügt:
entferne setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
und akzeptiere in deinen Filter sowohl die Datei (egal in welchen Verzeichnis)
sowie alle Verzeichnisse (ohne Punkt im Namen bzw. file.isDirectory() ),
reicht das?
 

Fleur de Soleil

Aktives Mitglied
Das Problem ist, ich brauche ein FileFilter außerhalb des FileChoosers, denn im FileChooser selbst soll er ja noch nicht filtern

EDIT: Nein das reicht nicht. Ich möchte doch, dass ich einen Ordner auswähle und nicht die Files
 
S

SlaterB

Gast
> Das Problem ist, ich brauche ein FileFilter außerhalb des FileChoosers, denn im FileChooser selbst soll er ja noch nicht filtern
das macht nun gar keinen Sinn,
um einen Filter IM FileChooser geht es doch die ganze Zeit, gerade um bei der Dateiauswahl zu filtern,
wieso du AUßeERHALB einen brauchst ist komplett unklar, bisher noch gar nicht angesprochen, wofür?

> Nein das reicht nicht. Ich möchte doch, dass ich einen Ordner auswähle und nicht die Files

wollt schon wieder meckern, aber jetzt beim Schreiben habe ich es verstanden,
dein JFileChooser funktioniert also schon, wählt das Verzeichnis aus, und jetzt geht es dir um die Zeilen 13-17 im zweiten Code des ersten Postings,
dort hast du jede Datei und kannst doch einfach mit if/else unterscheiden, meinetwegen auch die accept-Methode des FileFilter-Objektes verwenden,

den FileFilter irgendwo registrieren so dass du automatisch nur die richtigen Dateien bekommst,
das gibt es meines Wissens nach nicht

edit:
siehe API,
innerSourceFiles = sourceFile.list(FilenameFilter);
gibts sogar, gibt dann zwar nur Strings statt Files zurück, vielleicht ist dir das aber recht,

bzw. auch
listFiles(FileFilter filter)

File (Java Platform SE 6)
 
Zuletzt bearbeitet von einem Moderator:

Fleur de Soleil

Aktives Mitglied
War das eine schwere Geburt :lol: Bis ich mal vermittelt hatte was ich will...naja

Bin beim letzten eigenen Post drauf gekommen, dass ich beim listFiles einen Filter anwenden muss. Wusste nur noch nicht dass es sowas gibt ;)

Hab es jetzt mit listFiles(FileFilter flter) gelöst, so wie du es am Ende deines Posts gesagt hast.

Danke
 

Ähnliche Java Themen

Neue Themen


Oben