File.listFiles() mit dem FileFilter von JFileChooser?

Status
Nicht offen für weitere Antworten.
M

Mossos

Gast
Hallo zusammen!

Ich habe vor, einen gefilterten File-Array eines, mit dem JFileChooser ausgewählten Ordners, zu erstellen:
Code:
JFileChooser fc = new JFileChooser() {

[. . .] //Implementierung der Filter etc.

File ordner = fc.getSelectedFile();   //der ausgewählte Ordner
FileFilter filter= fc.getFileFilter();     // der aktuell ausgewählte Filter

fileArr = new File[ordner.listFiles(filter).length - 1]; //Das Array mit der bedürftigen Länge erstellen
fileArr = ordner.listFiles(filter); //Array füllen

[. . .]

Leider hab ich dabei das Problem, dass bei dem Befehl .listFiles(filter) folgender Fehler auftritt:
The method listFiles(FilenameFilter) in the type File is not applicable for the arguments (FileFilter)
Obwohl man normalerweise listFiles(FileFilter) benutzen kann. Ich denke mal das hängt damit zusammen dass der FileFilter vom JFileChooser von der javax.swing.filechooser.FileFilter - Klasse kommt. Allerdings hab ich keine Idee, wie ich den ausgewählten Ordner mit dem ausgewählten Filter filtern kann (Hoffe das war jetzt nicht zu kompliziert erklärt :p).
Hat jemand ne Idee/Lösung ??

Danke im Voraus!
MfG Mossos[/b]
 

Triebi

Aktives Mitglied
Mossos hat gesagt.:
Code:
[. . .]
 //Implementierung der Filter etc.
[. . .]
Wenn du die Filter selbst schreibst, müsste IMHO ein Kontrukt in Form von
Code:
class MyFileFilter extends javax.swing.filechooser.FileFilter implements  java.io.FileFilter
funktionieren.
 
M

Mossos

Gast
hm von Wrapper-Klassen hab ich noch keine Ahnung, hab jezz auf die schnelle auch nix gefunden was mir dafür helfen könnte..aber ich probiers mal..meld mich dann vll nomma
aber schonmal vielen dank![/quote]
 
M

Mossos

Gast
Also ich hab jezz die eigene FilterKlasse CostumFilter erstellt:
Code:
public class CostumFilter extends javax.swing.filechooser.FileFilter implements java.io.FileFilter {
	

	@Override
	public boolean accept(File f) {
		return f.isDirectory()
				|| f.getName().toLowerCase().endsWith(".txt");
	}

	@Override
	public String getDescription() {
		return "Texte";
	}
}

und im JFileChooser sieht das dann so aus:
Code:
fc.setFileFilter(new CostumFilter());
		
		fc.setFileFilter(new CostumFilter() {
			@Override
			public boolean accept(File f) {
				return f.isDirectory()
						|| f.getName().toLowerCase().endsWith(".mp3")
						|| f.getName().toLowerCase().endsWith(".wmv")
						|| f.getName().toLowerCase().endsWith(".wav")
						|| f.getName().toLowerCase().endsWith(".ogg")
						|| f.getName().toLowerCase().endsWith(".mid")
						|| f.getName().toLowerCase().endsWith(".midi");
			}

			@Override
			public String getDescription() {
				return "Musikdateien";
			}
		});
aber es kommt immernoch das gleiche problem.. :/
hab ich irgendwas falsch gemacht?
 

Triebi

Aktives Mitglied
Also bei diesem kleinen Beispiel gibt es nix zu meckern:
Code:
import java.io.*;
import javax.swing.*;

class CostumFilter extends javax.swing.filechooser.FileFilter implements java.io.FileFilter {
   @Override public boolean accept(File f) {return true;}
   @Override public String getDescription() {return "aales";}
}

class FileFilterTest {
	public static void main(String[] args) {
		JFileChooser fs = new JFileChooser();
		CostumFilter cf = new CostumFilter();
		fs.setFileFilter(cf);
		new File("/").listFiles(cf);
	}
}

Mir ist aber gerade dieses aufgefallen:
Mossos hat gesagt.:
The method listFiles(FilenameFilter) in the type File is not applicable for the arguments (FileFilter)
Es gibt mehrere listFiles():
Code:
File[]  listFiles() 
           Returns an array of abstract pathnames denoting the files in the directory denoted by this abstract pathname.

File[]  listFiles(FileFilter filter) 
           Returns an array of abstract pathnames denoting the files and directories in the directory denoted by this abstract pathname that satisfy the specified filter.

File[]  listFiles(FilenameFilter filter) 
           Returns an array of abstract pathnames denoting the files and directories in the directory denoted by this abstract pathname that satisfy the specified filter.
FilenameFilter ist wieder etwas anderes, irgendwie will dein Java die falsche Methode aufrufen.
Zeig' mal bitte mehr Code.
 
M

Mossos

Gast
ich zeig mal den ganzen JFileChooser:
Code:
    public void getFileChooser(){
    	JFileChooser fc = new JFileChooser();
		fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		
		if (fc.getFileSelectionMode() == 0){ //0 = FILES_ONLY
			fc.setMultiSelectionEnabled(true);
		}
		
		fc.setFileFilter(new CostumFilter());
		
		fc.setFileFilter(new CostumFilter() {
			@Override
			public boolean accept(File f) {
				return f.isDirectory()
						|| f.getName().toLowerCase().endsWith(".mp3")
						|| f.getName().toLowerCase().endsWith(".wmv")
						|| f.getName().toLowerCase().endsWith(".wav")
						|| f.getName().toLowerCase().endsWith(".ogg")
						|| f.getName().toLowerCase().endsWith(".mid")
						|| f.getName().toLowerCase().endsWith(".midi");
			}

			@Override
			public String getDescription() {
				return "Musikdateien";
			}
		});

		int state = fc.showOpenDialog(null);

		if (state == JFileChooser.APPROVE_OPTION) {
			
	//////////////////// Hier der wichtige Teil //////////////////////////
			
			if (fc.getFileSelectionMode() == 1) { //1 = DIRECTORIES_ONLY
				File ordner = fc.getSelectedFile();
				
				FileFilter moep = fc.getFileFilter();
				System.out.println(moep.getDescription());
				fileArr = new File[ordner.listFiles(moep).length - 1];
				fileArr = ordner.listFiles();
				filldir();
				
	//////////////////////////////////////////////////////////////////////			
				
			} else if (fc.getFileSelectionMode() == 0) { //0 = FILES_ONLY
				
				fileArr = fc.getSelectedFiles();
				filldir();
			}
			

		} else System.out.println("Auswahl abgebrochen");
	}
 
M

Mossos

Gast
Hab auch ma versucht nach CostumFilter zu casten:

Code:
CostumFilter moep = (CostumFilter) fc.getFileFilter();
fileArr = new File[ordner.listFiles(moep).length - 1];

Hierbei ist einmal das Problem, dass ne ClassCastException kommt wenn kein Filter im JFileChooserausgewählt wurde ("Alle Dateien") - was man ja noch beheben könnte. Allerdings funktionieren die Filter trotzdem nicht wirklich. Entweder werden trotzdem alle Dateien angezeigt (oder es gibt nen Laufzeitfehler, wenn keine Textdatei im Ordner ist - aber das ist meine Schuld und kein problem: NegativeArraySizeException siehe Zeile 2).
Ich versteh nur nicht wieso der Filter dann nicht funzt..beim cast verschwindet doch nix vom eigentlichen Filter oder??
 

Triebi

Aktives Mitglied
Zunächst die einfachen Dinge:
Mossos hat gesagt.:
Code:
fileArr = new File[ordner.listFiles(moep).length - 1];
NegativeArraySizeException
Das ist überflüssig, da fileArr in der darauf folgenden Zeile ein neues Array der richtigen Größe zugewiesen wird -> löschen.

Mossos hat gesagt.:
Hab auch ma versucht nach CostumFilter zu casten:
Code:
CostumFilter moep = (CostumFilter) fc.getFileFilter();

Hierbei ist einmal das Problem, dass ne ClassCastException kommt wenn kein Filter im JFileChooser ausgewählt wurde ("Alle Dateien") - was man ja noch beheben könnte.
Kein Wunder, dieser Standardfilter ist kein Objekt von CostumFilter. Mit
Code:
fc.setAcceptAllFileFilterUsed(false);
kannst du ihn (zumindest bis zu einer besseren Lösung) ausblenden.

Mal wieder zurück zum ursprünglichen Problem:
The method listFiles(FilenameFilter) in the type File is not applicable for the arguments (FileFilter)
konnte ich hier bisher nicht rekonstruieren. Schreib' doch mal an den Anfang deiner main-Methode diese Zeilen
Code:
	java.lang.reflect.Method[] m = File.class.getDeclaredMethods();
	for (int i = 0; i < m.length; i++) {
		String s = m[i].toString();
		if (s.contains("listFiles")) { System.out.println(s);}
	}
und zeig' die zugehörige Ausgabe.
 
M

Mossos

Gast
Die Ausgabe ist:
public java.io.File[] java.io.File.listFiles()
public java.io.File[] java.io.File.listFiles(java.io.FilenameFilter)
public java.io.File[] java.io.File.listFiles(java.io.FileFilter)
 
M

Mossos

Gast
Triebi hat gesagt.:
Mal wieder zurück zum ursprünglichen Problem:
The method listFiles(FilenameFilter) in the type File is not applicable for the arguments (FileFilter)
konnte ich hier bisher nicht rekonstruieren.

Willst du damit sagen, dass du meine Methode implementiert hast und bei dir nicht der Fehler kommt???
 
M

Mossos

Gast
Anscheinend ist FileFilter nicht gleich FileFilter..
Wenn ich folgendes deklariere:
Code:
java.io.FileFilter filter = fc.getFileFilter();
Spuckt eclipse diese Fehlermeldung aus:
Type mismatch: cannot convert from FileFilter to FileFilter

Mir sind jetzt echt die Ideen ausgegangen. Hat vll noch jmd ne Ahnung wie ich den ausgewählten Filter im JFileChooser in die listFiles()-Methode bekomme?
 

Triebi

Aktives Mitglied
Mossos hat gesagt.:
Die Ausgabe ist:
public java.io.File[] java.io.File.listFiles()
public java.io.File[] java.io.File.listFiles(java.io.FilenameFilter)
public java.io.File[] java.io.File.listFiles(java.io.FileFilter)
Hmm, alles da.

Willst du damit sagen, dass du meine Methode implementiert hast und bei dir nicht der Fehler kommt???
Genau.

Type mismatch: cannot convert from FileFilter to FileFilter
Ein javax.swing.filechooser.FileFilter ist erstmal absolut gar nicht mit einem java.io.FileFilter verwandt. Das ist hier das Problem - oder zumindest eins davon. Daher mein Vorschlag, in einer eigenen Klasse beide zu erweitern / implementieren.

Hat vll noch jmd ne Ahnung wie ich den ausgewählten Filter im JFileChooser in die listFiles()-Methode bekomme?
Also ich bräuchte erstmal eine Ahnung, warum bei dir versucht wird, listFiles(java.io.FilenameFilter) aufzurufen. Ein FilenameFilter ist wieder etwas vollkommen anderes.

Mir sind jetzt echt die Ideen ausgegangen.
Mir auch...
 
G

Guest

Gast
Ich hab auch überhaupt keine ahnung wieso der denkt in listFiles() nen FilenameFilter erwartet..der spinnt doch ^^

Naja ich hab das jezz einigermaßen hinbekommen..zwar nicht perfekt und was umständlich, aber vorerst reicht mir das:
Code:
File ordner = fc.getSelectedFile();
if(fc.getFileFilter().getDescription() == "Alle Dateien") { //Falls kein spezieller Filter gewählt ist:
	fileArr = ordner.listFiles();  //dann das Array ohne Filter füllen - ganz normal
} else {   //Wenn ein bestimmter Filter ausgewählt ist:

	//dann den JFileChooser-FileFilter nach java.ioFileFilter casten
	java.io.FileFilter filter = (java.io.FileFilter) fc.getFileFilter();  
	fileArr = ordner.listFiles(filter);   //und Array mit diesem Filter dann füllen
}

Also soweit funktioniert das alles...das einzige was jetzt net so doll ist, ist dass trotz ausgewählten Filter, die Unterordner vom ausgewählten Ordner angezeigt werden, obwohl die ja garkeine Endung haben. Aber man kann ja nicht alles haben ^^, vll ist das auch normal ka..
Vielen Dank für die Hilfe Triebi!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Ø Ein FXML-File mehrfach einfügen AWT, Swing, JavaFX & SWT 6
MiMa File Dateien im ListView als Name anzeigen? AWT, Swing, JavaFX & SWT 6
Rubberduck JavaFX Runnable jar file doesn't work AWT, Swing, JavaFX & SWT 2
F Output Stream / File Dateien / Speichern AWT, Swing, JavaFX & SWT 13
R FXML File kann nicht hinzugefügt werden! AWT, Swing, JavaFX & SWT 2
S JavaFX Variablen in einem FXML File verwenden AWT, Swing, JavaFX & SWT 8
B JavaFx TreeView mit file system AWT, Swing, JavaFX & SWT 1
J File Sucher AWT, Swing, JavaFX & SWT 4
L JavaFX TreeView mit File Objects AWT, Swing, JavaFX & SWT 0
D Swing JTable mit Inhalt aus XML-File AWT, Swing, JavaFX & SWT 3
Z JAVAFX Stage über Controller weitergeben um css-file zu laden AWT, Swing, JavaFX & SWT 4
M JFX8 Mixed 2D and 3D, Scene Subscene incorrect drawing 3ds-file AWT, Swing, JavaFX & SWT 6
R JavaFX Stage.close() funktioniert nicht im jar-File AWT, Swing, JavaFX & SWT 2
B JAXB , Unmarshal XML File AWT, Swing, JavaFX & SWT 3
T FileFilter: class File wird nicht gefunden AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Desktop.open(file) hängt AWT, Swing, JavaFX & SWT 4
J SWT jar-File relativ groß AWT, Swing, JavaFX & SWT 5
M JFreeChart in ein File schreiben (bzw. JFrame in ein File Schreiben) AWT, Swing, JavaFX & SWT 2
GUI-Programmer InputStream zu File kopieren - JPrograssbar anzeigen AWT, Swing, JavaFX & SWT 10
C File-Objekte an JList übergeben und abrufen AWT, Swing, JavaFX & SWT 6
Z Component für File-Browser ähnliche Oberfläche AWT, Swing, JavaFX & SWT 6
T SWT Window Builder Pro File Dialog anzeigen AWT, Swing, JavaFX & SWT 10
Z Swing Mittels GUI Werte aus Property-File ändern AWT, Swing, JavaFX & SWT 5
S JTree aus List<File> erstellen AWT, Swing, JavaFX & SWT 8
L Filechooser File Öffnen AWT, Swing, JavaFX & SWT 4
I Swing JTree aus ArrayList<File> erzeugen AWT, Swing, JavaFX & SWT 15
E Swing File lesen und in JEditorpane AWT, Swing, JavaFX & SWT 2
N File.setlastmodified() AWT, Swing, JavaFX & SWT 5
J Progressbar aktualisierung nach file übergabe AWT, Swing, JavaFX & SWT 7
T Dynamic JTree: File System Problem AWT, Swing, JavaFX & SWT 2
freakysheep mit jtree config file erzeugen AWT, Swing, JavaFX & SWT 2
M File-Chooser Problem (2 X Mausklick öffnen) AWT, Swing, JavaFX & SWT 11
N JFilechooser File auslesen AWT, Swing, JavaFX & SWT 10
R Jar File AWT, Swing, JavaFX & SWT 2
I Dateiendung aus File AWT, Swing, JavaFX & SWT 9
A Probleme mit einer JOptionPane in einem jar-File AWT, Swing, JavaFX & SWT 14
G avi-Datei mit Desktop.getDesktop().open(File) öffnen AWT, Swing, JavaFX & SWT 4
DeeDee0815 JEditorPane + HTML + <img src=file> + JAR = FALSE AWT, Swing, JavaFX & SWT 3
E GUI-Elemente aus txt- oder xml-File erstellen? AWT, Swing, JavaFX & SWT 5
F File Chooser - nur PDFs AWT, Swing, JavaFX & SWT 2
C File Explorer simulieren AWT, Swing, JavaFX & SWT 6
B Problem mit ImageIcons in einem Jar-File AWT, Swing, JavaFX & SWT 7
M Windows file icons in Java verwenden AWT, Swing, JavaFX & SWT 2
N JFileChooser => Exc. in thread "Basic L&F File L AWT, Swing, JavaFX & SWT 11
P SkinLF aus jar-File AWT, Swing, JavaFX & SWT 5
C getIcon für ein File das es nicht gibt? AWT, Swing, JavaFX & SWT 2
U externes .jar file einbinden [jdic] AWT, Swing, JavaFX & SWT 16
Z jar-File mit SWT - Exception AWT, Swing, JavaFX & SWT 4
M Ausführbares Jar File AWT, Swing, JavaFX & SWT 12
N File von HDD in JEditorPane laden? AWT, Swing, JavaFX & SWT 2
V SWT Programm als jar-File starten AWT, Swing, JavaFX & SWT 5
P XML-File in Java-App darstellen - wie im Internet Explorer AWT, Swing, JavaFX & SWT 2
D File verschieben. In java möglich? AWT, Swing, JavaFX & SWT 3
J ganz dringend File Chooser: extensions! AWT, Swing, JavaFX & SWT 6
javampir Swing Anzeige der FileFilter im JFileChooser AWT, Swing, JavaFX & SWT 0
P Anhand von FileFilter Dateinendung anfügen AWT, Swing, JavaFX & SWT 2
P FileFilter auf Dateinamen AWT, Swing, JavaFX & SWT 1
S FileFilter Problem Eclipse AWT, Swing, JavaFX & SWT 7
N Swing FileFilter lässt JTree sich nicht öffnen AWT, Swing, JavaFX & SWT 2
B AWT FileFilter beim FileDialog AWT, Swing, JavaFX & SWT 4
B FileFilter AWT, Swing, JavaFX & SWT 2
K Swing JFileChooser zum Speichern - FileFilter AWT, Swing, JavaFX & SWT 2
M FileFilter geht nicht AWT, Swing, JavaFX & SWT 5
T Problem mit FileFilter AWT, Swing, JavaFX & SWT 6
D FileFilter Default Eintrag AWT, Swing, JavaFX & SWT 4
D gesetzten FileFilter herausfinden AWT, Swing, JavaFX & SWT 6
T FileFilter AWT, Swing, JavaFX & SWT 3
R probleme mit filefilter :( AWT, Swing, JavaFX & SWT 5
L Multi FileFilter menue. AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben