JFileChooser Datentyp Unterscheidung

LatinFavourite

Bekanntes Mitglied
Guten Tag,

ich habe in meinem Programm die Möglichkeit den Zustand des Programmes entweder als Image oder als Textdatei zu speichern. Die beiden Methoden funktionieren inzwischen auch. Wie ist es aber nun möglich, zwischen den Methoden zu unterscheiden. Also bei Auswahl des jeweiligen Datentyps .png oder .txt die entsprechende Methode aufzurufen. Kann dies in dem JFileChooser abgefragt werden, oder muss ich selber den Datentyp auslesen und dann die Methode ausführen?

Über den den Dateityp wird lediglich "allgemeine Datei" ausgegeben.

Java:
String fileTypeName = saveChooser.getTypeDescription(fileToSave);

Vielen Dank für jegliche Hilfe. :)
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
Du kannst auch einfach anhand der Endung eine Auswahl treffen:
Java:
String[] suffixes = new String[]{"jpg","png","gif","bmp"};
List<String> suffixList = Arrays.asList(suffixes);
for(String s : suffixes){
    if (fileName.toLowerCase().endsWith(s)){
        //als image speichern
        break;
    }
}
 

LatinFavourite

Bekanntes Mitglied
Das funktioniert so leider bei mir nicht, da ich bis jetzt an den Pfad einfach die Endung .png anhänge. Aber ich muss ja nun einen Schritt vorher auf das Suffix prüfen. Und dann entweder .png oder .txt anhängen. Gibt es keine Möglichkeit an den ausgewählten Datentyp zu kommen?

Bis jetzt sieht der Save Dialog so aus:

Java:
public void saveDialog(){
		JFileChooser saveChooser = new JFileChooser();
		saveChooser.addChoosableFileFilter(new FileNameExtensionFilter(".txt", "txt"));
		saveChooser.addChoosableFileFilter(new FileNameExtensionFilter(".png", "png"));
		
		
		int selection = saveChooser.showSaveDialog(null);
		
		if(selection == JFileChooser.APPROVE_OPTION){
			File file = saveChooser.getSelectedFile();
		
			String result = file.getAbsolutePath() + ".png";
			File fileToSave = new File(result);
			
			
			
			grid.saveMap(fileToSave);
			
			
		}
	}



Den ausgewählten File Filter kann ich ja zurückgeben,

Java:
saveChooser.getFileFilter()
 
Zuletzt bearbeitet:

LatinFavourite

Bekanntes Mitglied
Hallo, ich habe inzwischen das Problem lösen können. Für die, die es interessiert. Ich habe nun eine eigene Hilfsmethode, die prüft, welcher Dateityp ausgewählt worden ist und hängt das entsprechende Suffix an. Jetzt kann ich wie gewünscht eine Überprüfung durchführen und mithilfe eines booleschen Flags die entsprechende Methode starten.

Java:
if(fileToSave.getAbsolutePath().endsWith(".png")){
				grid.saveMap(fileToSave, true);
			}else if(fileToSave.getAbsolutePath().endsWith(".txt")){
				grid.saveMap(fileToSave, false);
			}

Trotzdem Danke für die Hilfe. :)
 

Harry Kane

Top Contributor
Mir war und ist noch nicht so richtig klar, wo dein eigentliches Problem liegt und inwiefern dir deinen oben gezeigte Lösung weiterhilft.
bezogen auf dein Codeschnipsel oben: wie stellst du sicher, dass die Erweiterung des Files tatsächlich "png" ist, wenn der Benutzer den Dateityp "PNG" z. B. mit einem FileFilter ausgewählt hat?
Ein JFileChooser stellt dies nämlich keinesfalls sicher. Es gibt auch keine out of the Box Möglichkeit, den Benutzer bei der Benutzung eines SAVE Dialogs den Benutzer vor dem Überschreiben einer existierenden Datei zu warnen.
ich stand vor einiger Zeit vor einem ähnlichen Problem: ich brauchte einen JFileChooser, der beim Speichern eine ggf. fehlende Endung anhängt und der vor dem Überschreiben einer existierenden Datei warnt. Dazu habe ich mir einen speziellen FileFilter geschrieben, und eine Klasse die JFileChooser erweitert. Hier die Klassen:
Java:
public class OverwriteProtectedFileChooser extends JFileChooser {

    private String extension;
    
    private boolean enforceFileExtension;

    public OverwriteProtectedFileChooser(File file) {
        super(file);
    }

    public void setSuffix(String extension){
        this.extension = extension;
        if(extension == null) return;
        if(!extension.startsWith(".")) this.extension = "."+this.extension;
    }

    public void setEnforceFileExtension(boolean b){
        this.enforceFileExtension = b;
    }

    public boolean getEnforceFileExtension(){
        return this.enforceFileExtension;
    }
    
    @Override
    public void approveSelection() {
        File selected = getSelectedFile();
        if(selected.isDirectory()){
            super.approveSelection();
            return;
        }
        FileFilter ff = super.getFileFilter();
        if(super.getFileFilter() instanceof CustomFileFilter && enforceFileExtension){
            extension = ((CustomFileFilter)ff).getPreferredSuffix();
        }
        if(extension != null && !extension.startsWith(".")) this.extension = "."+this.extension;
        if(extension != null && !selected.getName().endsWith(extension)){
            super.setSelectedFile(new File(selected.getPath() + extension));
        }
        if (getDialogType() == JFileChooser.SAVE_DIALOG && getSelectedFile() != null && getSelectedFile().exists()) {
            int value = JOptionPane.showConfirmDialog(this, "Warning! The file \n\r" + getSelectedFile().getPath() + "\n\r already exists! Overwrite it?", "Warning", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
            if (value == JOptionPane.NO_OPTION) {
                return;
            }
        }
        super.approveSelection();
    }
}
und
Java:
public class CustomFileFilter extends FileFilter {

    private String description;
    private String[] suffices;

    public CustomFileFilter(String description, String[] suffices) {
        StringBuffer descr = new StringBuffer(" (");
        this.suffices = suffices;
        for (int i = 0; i < this.suffices.length; i++) {
            if (i > 0) {
                descr.append(",");
            }
            descr.append("*." + this.suffices[i]);
        }
        descr.append(")");
        this.description = description + descr.toString();
    }

    public String getDescription() {
        return this.description;
    }
    public String getPreferredSuffix(){
        if(suffices.length > 0) return suffices[0];
        return null;
    }
    
    public boolean accept(File file) {
        if (file == null) {
            return false;
        }
        if (file.isDirectory()) {
            return true;
        }
        for (int i = 0; i < this.suffices.length; i++) {
            if (file.getName().toLowerCase().endsWith(this.suffices[i])) {
                return true;
            }
        }
        return false;
    }
}
 

LatinFavourite

Bekanntes Mitglied
Guten Abend,

genau das, was du beschrieben hast, wollte ich erreichen. Habe einen guten Ansatz gefunden und wohl damit etwas Ähnliches erreicht wie du, obwohl dein Code für mich auf den ersten Blick sehr komplex ist aber natürlich deutlich netter umgesetzt ist. Werde ich mir morgen auf jedenfall ausgiebig ansehen. Hierfür erst einmal ein dickes Dankeschön. :) Den Ansatz den ich gefunden habe ist der, über den FileFilter jedes Suffix zu bekommen und diese dann in einem Array abzulegen. Der erste Eintrag entspricht dann dem ausgewählten Filter bzw. Suffix.
Wenn dies nicht nötig ist, wird einfach getSelectedFile() zurückgegeben


Das war auch mein Ansatz, jedoch wusste ich nicht, wie ich den FileFilter dazu verwenden kann. Daher gefiel mir der beschriebene Ansatz ganz gut.


Java:
public static File getSelectedFileWidthExtension(JFileChooser c){
		File fileToSave = c.getSelectedFile();
		if(c.getFileFilter() instanceof FileNameExtensionFilter){
			String[] extensions = ((FileNameExtensionFilter) c.getFileFilter()).getExtensions();
			String nameLower = fileToSave.getName().toLowerCase();
			
			for(String ext:extensions){
				if(nameLower.endsWith('.' + ext.toLowerCase())){
					return fileToSave;
				}
			}
			
			fileToSave = new File(fileToSave.toString() + '.' + extensions[0]);
		}
		return fileToSave;
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Tommy135 JFileChooser ist sehr langsam AWT, Swing, JavaFX & SWT 13
T JFileChooser ist Englisch und bleibt Englisch und bleibt Englisch... AWT, Swing, JavaFX & SWT 15
M Swing jFileChooser Header viewTypeDetails setFont AWT, Swing, JavaFX & SWT 0
I JFileChooser mit System L&F bei anderem L&F der eigtl. Anwendung AWT, Swing, JavaFX & SWT 0
Meeresgott AWT JFileChooser bestimmte Ordner anzeigen AWT, Swing, JavaFX & SWT 16
S Swing JFileChooser best. Ordner wie Dateien behandeln AWT, Swing, JavaFX & SWT 4
H Swing JFileChooser für nicht existierendes Unterverzeichnis AWT, Swing, JavaFX & SWT 3
javampir Swing Anzeige der FileFilter im JFileChooser AWT, Swing, JavaFX & SWT 0
K JFileChooser NullPointerException AWT, Swing, JavaFX & SWT 7
H JFileChooser Dateinamen vorgeben (Save Dialog) AWT, Swing, JavaFX & SWT 9
Neumi5694 Swing JFilechooser - Detailansicht AWT, Swing, JavaFX & SWT 0
M JFileChooser Look and Feel AWT, Swing, JavaFX & SWT 2
T JFileChooser Rahmenfarbe ändern AWT, Swing, JavaFX & SWT 1
K Pfad mit JFileChooser ausgeben lassen AWT, Swing, JavaFX & SWT 7
C JFileChooser hängt bei Ausführung mit Terminal AWT, Swing, JavaFX & SWT 2
T Swing JFileChooser und FileView AWT, Swing, JavaFX & SWT 4
M Einzelne Ordner im JFileChooser ausgrauen? AWT, Swing, JavaFX & SWT 4
H Swing JFileChooser inline editing AWT, Swing, JavaFX & SWT 4
D JFileChooser anpassen AWT, Swing, JavaFX & SWT 5
AssELAss Verzeichnis JFileChooser aktualisieren AWT, Swing, JavaFX & SWT 0
A JFileChooser Datei speichern AWT, Swing, JavaFX & SWT 4
A Datei weiterverwenden mit JFileChooser AWT, Swing, JavaFX & SWT 6
T Importer-Auswahl im JFileChooser AWT, Swing, JavaFX & SWT 3
N JFileChooser bzw. FileDialog Problem AWT, Swing, JavaFX & SWT 10
A Swing JFileChooser - Größenänderung nach Aufruf von showOpenDialog() AWT, Swing, JavaFX & SWT 15
D Serverdirectory auf Client browsen mit JFileChooser AWT, Swing, JavaFX & SWT 7
F icon aus exe auslesen mithilfe des JFilechooser ? AWT, Swing, JavaFX & SWT 4
C JFileChooser und Netzwerk Laufwerke AWT, Swing, JavaFX & SWT 4
Iron Monkey JFileChooser - Drag and Drop AWT, Swing, JavaFX & SWT 5
J JFileChooser - Datei speichern AWT, Swing, JavaFX & SWT 7
M Element aus JList eines JFileChooser entfernen AWT, Swing, JavaFX & SWT 3
P JFileChooser mit verschidene Endungen AWT, Swing, JavaFX & SWT 12
S Swing Ordner im JFileChooser auswählen AWT, Swing, JavaFX & SWT 2
C JFileChooser bringt parent durcheinander AWT, Swing, JavaFX & SWT 2
N JFileChooser mit Dateinamenvorgabe AWT, Swing, JavaFX & SWT 9
S JFileChooser GTK (Ubuntu) "hässlich" AWT, Swing, JavaFX & SWT 2
A Swing JFileChooser mit modifiziertem Kontextmenü AWT, Swing, JavaFX & SWT 4
S JFileChooser öffnet den falschen Ordner AWT, Swing, JavaFX & SWT 4
A Swing JFilechooser zeigt verzeichnisse nicht an AWT, Swing, JavaFX & SWT 2
A Swing JFileChooser - Anzeige in Echtzeit filtern AWT, Swing, JavaFX & SWT 10
M JFileChooser umbenennen verbieten AWT, Swing, JavaFX & SWT 4
Helgon JFileChooser öffnet sich 2x AWT, Swing, JavaFX & SWT 12
K JFileChooser mit Zusatzfunktionen AWT, Swing, JavaFX & SWT 8
GUI-Programmer JFilechooser, mehrere Datein selektieren und Reihenfolge (2) AWT, Swing, JavaFX & SWT 8
V JFileChooser auf Mac und Netzwerkordner AWT, Swing, JavaFX & SWT 2
B JFileChooser breite der Spalten? AWT, Swing, JavaFX & SWT 5
M JFileChooser setCurrentDirectory() - Verzeichnis relativ zum Code/binary AWT, Swing, JavaFX & SWT 14
P Swing Dateinamen im JFileChooser vorschlagen AWT, Swing, JavaFX & SWT 11
M JFileChooser Abfangen des DateiTypen möglich?? AWT, Swing, JavaFX & SWT 5
T Swing JFileChooser --> Desktop und Laufwerke im "Suchen in" - Drop Down AWT, Swing, JavaFX & SWT 3
N JFileChooser - Keine Funtkion AWT, Swing, JavaFX & SWT 13
T JFileChooser - "Öffnen-Button" aktivieren/deaktivieren möglich??? AWT, Swing, JavaFX & SWT 2
jueki Aktuell eingestellten Filter aus einem JFileChooser abfragen. AWT, Swing, JavaFX & SWT 5
F Swing JFileChooser - Dateinamen nicht editierbar machen AWT, Swing, JavaFX & SWT 8
I Fehler bei JFileChooser AWT, Swing, JavaFX & SWT 2
K JFileChooser mehrere Dateien markieren ohne STRG AWT, Swing, JavaFX & SWT 4
Ivan Dolvich [Linux] JFileChooser sieht komisch aus... AWT, Swing, JavaFX & SWT 12
M Zurück-Button in JFileChooser AWT, Swing, JavaFX & SWT 9
N JFileChooser AWT, Swing, JavaFX & SWT 4
D Problem mit JFileChooser -> Daten werden mit anführungsstriche in JTable geschrieben AWT, Swing, JavaFX & SWT 8
S JFileChooser Dateiname Autovervollständigung AWT, Swing, JavaFX & SWT 2
B JDialog über JFileChooser anzeigen AWT, Swing, JavaFX & SWT 6
I Swing JFileChooser '\' im Pfad... AWT, Swing, JavaFX & SWT 2
K Swing JFileChooser zum Speichern - FileFilter AWT, Swing, JavaFX & SWT 2
M Swing Execption beim JFileChooser AWT, Swing, JavaFX & SWT 4
kodela Swing JFileChooser und die Datei-Extension AWT, Swing, JavaFX & SWT 3
jueki eigenen Button in JFileChooser einfügen AWT, Swing, JavaFX & SWT 7
alderwaran jFileChooser showSaveDialog, dateinamen werden mit pfadnamen überschrieben beim navigieren AWT, Swing, JavaFX & SWT 1
B Swing Suche JFileChooser zum Speichern AWT, Swing, JavaFX & SWT 2
Iron Monkey JFileChooser DIRECTORIES_ONLY AWT, Swing, JavaFX & SWT 4
Semox Swing JFileChooser: Problem Approve oder Cancel abzufangen AWT, Swing, JavaFX & SWT 7
H JTree - nach Auswahl aus JFileChooser wird nur der erste Knoten angezeigt AWT, Swing, JavaFX & SWT 3
kodela Sicherheitsabfrage mit JFileChooser AWT, Swing, JavaFX & SWT 2
DARK_ZERATO2 jFileChooser AWT, Swing, JavaFX & SWT 4
G JFileChooser Problem AWT, Swing, JavaFX & SWT 4
G Swing JFileChooser Event für neue Directory? AWT, Swing, JavaFX & SWT 5
P JFileChooser AWT, Swing, JavaFX & SWT 2
M Swing JFileChooser und JFrame AWT, Swing, JavaFX & SWT 5
G Swing JFileChooser in einem JPanel? AWT, Swing, JavaFX & SWT 3
J JFileChooser Dateiauswahl beim Tippen einschränken AWT, Swing, JavaFX & SWT 3
M Swing JFileChooser mit Windows 7 AWT, Swing, JavaFX & SWT 8
R JFileChooser - Initiales Verzeichnis auswählen AWT, Swing, JavaFX & SWT 8
brainray JFileChooser - es sollen nur Ordner wählbar sein AWT, Swing, JavaFX & SWT 2
T JFileChooser Problem AWT, Swing, JavaFX & SWT 3
N Mit JFileChooser ein Verzeichnis auswählen AWT, Swing, JavaFX & SWT 7
M Swing JFileChooser und versteckte Ordner AWT, Swing, JavaFX & SWT 2
F jFileChooser verwenden AWT, Swing, JavaFX & SWT 4
M Swing ImageIcon über JFileChooser einbinden AWT, Swing, JavaFX & SWT 4
F JFileChooser mal wieder AWT, Swing, JavaFX & SWT 2
ARadauer Swing JFileChooser mit Bildvorschau AWT, Swing, JavaFX & SWT 5
H Swing Dateiauswahldialog mit JFileChooser funktioniert unzuverlässig AWT, Swing, JavaFX & SWT 11
G Swing JFileChooser nur in Verzeichnis+Unterverzeichnisse AWT, Swing, JavaFX & SWT 5
K Swing JFileChooser AWT, Swing, JavaFX & SWT 6
M JFileChooser einschränken AWT, Swing, JavaFX & SWT 3
L JFileChooser braucht lang zum öffnen AWT, Swing, JavaFX & SWT 2
S NullPointerException bei JFileChooser AWT, Swing, JavaFX & SWT 8
M JFilechooser defaultdirectory AWT, Swing, JavaFX & SWT 5
C JFilechooser this.setAlwaysOnTop AWT, Swing, JavaFX & SWT 2
G JFileChooser - erkennen v. existierenden Dateien ohne Endung AWT, Swing, JavaFX & SWT 1
N JFilechooser File auslesen AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben