~Java4Beginners~
~Java4Beginners~

JFileChooser

Beim Umgang mit Dateien wird man häufig damit konfrontiert, dass eine Datei entweder geöffnet oder gespeichert werden soll. Was wir im Bereich der Datenströme ausgeben und Datenströme einlesen über fixe Strukturen im Quelltext erledigt haben, können wir nun mit der Klasse JFileChooser auf die klassiche Art und Weise, nämlich über ein Dialogfenster zur Dateiauswahl, erledigen.

Beim JFileChooser haben wir keinen statischen Zugriff, sondern müssen davon ein Objekt erzeugen.

Beispielprogramm


import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 * Beispiel für Umgang mit JFileChooser DateiÖffnen
 * @author Markus Badzura
 */
public class DateiOeffnen 
{
    public static void main(String[] args) 
    {
        JFileChooser fc = new JFileChooser("E:\\Java-Programmierung\\Projektordner\\"
               + "JavaProgrammierung\\src\\GUIProgrammierung");
        FileNameExtensionFilter filter = new FileNameExtensionFilter("nur java", "java", "jar");
        FileNameExtensionFilter filter1 = new FileNameExtensionFilter("nur Bitmap", "bmp");
        fc.setFileFilter(filter); 
        fc.setFileFilter(filter1);
        int auswahl = fc.showOpenDialog(null);
        if (auswahl == JFileChooser.APPROVE_OPTION)
        {
            System.out.println(fc.getSelectedFile());
            System.out.println(fc.getSelectedFile().getName());
        }
        fc.approveSelection();
    }
}
Mit Erzeugung des JFileChooser-Objektes können wir einen Standardpfad übergeben, an welchem die Dateiauswahl im Dialogfenster beginnt. Sollten wir keine Angabe machen, dann öffnet sich das Dialogfenster im User-Stammverzeichnis.

Mit der Methode showOpenDialog(Component c) öffnen wir das Dialogfenster. Mit Component c übergeben wir wieder das aufrufende Objekt, welches modal gesetzt wird. Sollten wir kein aufrufendes Objekt haben, oder die Modalität nicht wünschen, übergeben wir an dieser Stelle den Wert null.

Der Methodenaufruf getSelectedFile() gibt uns als Rückgabewert die komplette Pfadangabe der Datei zurück. Falls nur der Dateiname gewünscht wird, so erfolgt dies über getSelectedFile().getName()

Wenn wir nun das Programm ausführen und eine Datei auswählen, erhalten wir folgende Ansicht.

Durch die Tatsache, dass wir das Ergebnis des showOpenDialogs in eine int-Variable speichern, können wir mit einer IF-Abfrage abfragen, ob der Öffnen-Button gedrückt wurde. Da dies eine statische Variable innerhalb der JFileChooser-Klasse ist, rufen wir diese Variable nicht über das Objekt, sondern über die Klasse auf. Die Prüfung, ob Öffnen gedrückt wurde, erfolgt in einer if-Anweisung.

FileNameExtensionFilter

Beim Öffnen-Dialog haben wir die Auswahl, den Dateityp auszuwählen. Allerdings nur die Option Alle Dateien.

Über die Klasse FileNameExtensionFilter erhalten wir die Möglichkeit, diese Auswahl selbst zu erweitern.

Hierfür erstellen wir ein neues FileNameExtensionFilter Objekt und übergeben den Objekt mindestens 2 Parameter vom Datentyp String. Der erste Parameter ist die Beschreibung, welche uns bei Dateityp angezeigt wird. Alle weiteren Parameter geben die Dateinamenserweiterung an, die bei Auswahl des Filters angezeigt werden soll. Dieser Filter wird unserem JFileChooser - Objekt dann mit add übergeben.

        FileNameExtensionFilter filter = new FileNameExtensionFilter("nur java", "java", "jar");
        FileNameExtensionFilter filter1 = new FileNameExtensionFilter("nur Bitmap", "bmp");
        fc.setFileFilter(filter); 
        fc.setFileFilter(filter1);
Es muss für jede Auswahlmöglichkeit ein Filter definiert werden. Der zuletzt hinzugefügte Filter wird in er Auswahl dann als erstes angezeigt.

Datei speichern


import javax.swing.JFileChooser;

/**
 * Beispiel für Umgang mit JFileChooser DateiSpeichern
 * @author Markus Badzura
 */
public class DateiSpeichern 
{
    public static void main(String[] args) 
    {
        JFileChooser fc = new JFileChooser("E:\\Java-Programmierung\\Projektordner\\"
               + "JavaProgrammierung\\src\\GUIProgrammierung");
        int auswahl = fc.showSaveDialog(null);
        if (auswahl == JFileChooser.APPROVE_OPTION)
        {
            System.out.println(fc.getSelectedFile());
            System.out.println(fc.getSelectedFile().getName());
        }
        fc.approveSelection();
    }    
}
Sicherlich ist der Unterschied sofort ins Auge gefallen, worin der Unterschied zwischen Datei Öffnen und Datei Speichern liegt. Beim Datei Öffnen rufen wir die Methode ShowOpenDialog(null) auf, während wir beim Datei Speichern die Methode ShowSaveDialog(null) aufrufen. Ansonsten ist der Quelltext identisch.

In diesen Beispielen wurde die Datei, bzw. der Dateipfad nur über die Konsole ausgegeben. Beim Aufruf innerhalb eines Programmes würden Sie das Ergebnis des Dialogfensters dem File-Objekt übergeben.

Beispiel-Methoden

mcsefd ist ein Objekt der Datenverarbeitungsklasse dieses Projektes. Alle Variablen wurden bereits im Vorfeld deklariert.

    /**
     * Datei Speichern unter mittels JFileChooser
     * @author Markus Badzura
     * @since 1.0.016
     */
    private void dateiSpeichernUnter()
    {
        fcs = new JFileChooser();
        fcs.setDialogTitle("Speichern unter");
        FileNameExtensionFilter filter = new FileNameExtensionFilter("Fragetextdatei", "txt");
        // Sorgt dafür, das aktueller Dateiname als Auswahldateiname eingefügt wird.
        fcs.setSelectedFile(mcsefd.getDatei());
        fcs.setFileFilter(filter);
        int auswahl = fcs.showSaveDialog(this);
        if (auswahl == JFileChooser.APPROVE_OPTION)
        {
            mcsefd.setDatei(fcs.getSelectedFile());
            mcsefd.speichern();
            this.setTitle("Frageeditor Aktuelle Datei: "+fcs.getSelectedFile().getName());            
        }
        fcs.approveSelection();          
    }    
    /**
     * Datei öffnen mittels JFileChooser
     * @author Markus Badzura
     * @since 1.0.014
     */
    private void dateiOeffnen()
    {
        fragenummer = 0;
        fc = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("Fragetextdatei", "txt");
        fc.setFileFilter(filter); 
        int auswahl = fc.showOpenDialog(this);
        if (auswahl == JFileChooser.APPROVE_OPTION)
        {
            mcsefd = new MCSE_frage_datei(fc.getSelectedFile());
            mcsefd.getDateiInhalt();
            vorbemerkung = mcsefd.getVorbemerkung();
            fragen = mcsefd.getGesamtfragen();
            jmi_datei_speichern.setEnabled(true);
            jmi_datei_speichernUnter.setEnabled(true);
            jm_bearbeiten.setEnabled(true);
            jm_frage.setEnabled(true);
            this.setTitle("Frageeditor Aktuelle Datei: "+fc.getSelectedFile().getName());
            setFragen(fragenummer);
        }
        fc.approveSelection();            
    }
nach oben Java4Beginners -- Seitenversion 1.01 -- Stand: 2017-05-25