# Last Path in File Chooser



## iPhone007 (14. Apr 2010)

Hallo zusammen

Ich habe einen File Chooser in meine Applikation eingebaut und als Default Pfad "C:" gesetzt. Nun will ich jetzt das er eigentlich merkt wenn ich bereits einmal in z.B. "C:\Daten" letztes mal ein File ausgewählt habe das er bei nächstem start von der Applikatin und beim Auswahl von Files direkt in "C:\Daten" Startet und nicht jedes mal in "C:". Zurzeit habe ich einfach fest in Code gesagt er soll in "C:" starten, weil ich nicht wusste wie ich es anders umsetzten könnte. Ich könnte mir vorstellen wie ich das lösen konnte aber ich dachte das es sicherlich eine spez. Funktion dafür gibt, die ich einfach nicht finden kann. Kann mir hier jemand ein Tipp geben?

Hier ist mein FileChooser:

```
private void jMenuItemOpenProfileActionPerformed(java.awt.event.ActionEvent evt) {                                                     
		System.out.println(String.format("[jMenuItemOpenProfileActionPerformed] event occured ... evt=%s", evt.toString()));
		//Create a file chooser with default open directory
		final JFileChooser fc = new JFileChooser("C:\\");
		fc.setFileFilter(new HTMLFileFilter());
		//In response to a button click:
		int returnVal = fc.showOpenDialog(jMenuItemOpenProfile);

		if( returnVal == JFileChooser.APPROVE_OPTION ) {
			File returnOpenProfilePath = fc.getSelectedFile();
			//initComponents();
			jTreeProfile = initProfileDescriptionGUI(
					returnOpenProfilePath.getAbsolutePath(),
					jTreeProfile,jTextPaneItemInfCim,jTextPaneItemInfDesc,jScrollPaneProfile);
		}
	}
```

Gruss
iPhone Freek


----------



## eRaaaa (14. Apr 2010)

Ohne es jetzt getestet zu haben oder wirklich zu wissen, aber normal merkt sich der FC dein letztes dir, wieso er das bei dir nicht macht, liegt wahrscheinlich daran, dass du jedes mal wenn du die Methode aufrufst, einen neuen FileChooser erstellst.
Erstelle ihn einmal und rufe dann in deiner Methode einfach jedes mal nur fc.showOpenDialog auf. Jedes mal einen neuen Filter zu erstellen braucht man ja auch nicht unbedingt...


----------



## hansmueller (14. Apr 2010)

Oder du läßt das Programm sich den Pfad der letzten geöffneten Datei merken und verwendest diesen Pfad dann im Konstuktor von FileChooser.

MfG
hansmueller


----------



## iPhone007 (14. Apr 2010)

eRaaaa hat gesagt.:


> Ohne es jetzt getestet zu haben oder wirklich zu wissen, aber normal merkt sich der FC dein letztes dir, wieso er das bei dir nicht macht, liegt wahrscheinlich daran, dass du jedes mal wenn du die Methode aufrufst, einen neuen FileChooser erstellst.
> Erstelle ihn einmal und rufe dann in deiner Methode einfach jedes mal nur fc.showOpenDialog auf. Jedes mal einen neuen Filter zu erstellen braucht man ja auch nicht unbedingt...



Hallo
Danke für die schnelle Antwort.
Verstehe immer noch nicht wie du es meinst, es wird ja immer noch dasselbe Code aufgerufen, auch wenn ich es in eine externe Methode rein packe? Bin noch ein Anfänger, kann sein das es ganz logisch kling, für mich aber immer noch nicht. 

@hansmueller
Das dachte ich auch, dies ist mein Plan B, aber ich dachte das es einfachen und sauberer geht deswegen will ich es zuerst irgendwie anders, einfacher versuchen. Die Applikation wird weiter entwickelt, deswegen versuche ich sauber zu programmieren.  Die Lösungsmöglichkeit ist sicherlich nicht falsch, aber ich dachte das es sicher einfacher geht.

Gruss von mit und meinem iPhone


----------



## Michael... (14. Apr 2010)

Zum einen solltest Du - wie bereits von eRaaaa angemerkt - in der actionPerformed nicht jedesmal einen neuen FileChooser erzeugen, dann hast Du zumindest bei mehrfachen Aufrufen innerhalb einer "Arbeitssitzung" immer das zuletzt verwendete Verzeichnis.
Wenn Du dann noch willst, dass er beim nächsten Start der Applikation immer noch weiss, welches Verzeichnis zuletzt verwendet wurde, musst Du das speichern. In einer Datei, per Properties oder Preferences, in einer Datenbank... ja nach Bedarf und Systemumgebung.


----------



## iPhone007 (15. Apr 2010)

Hallo... so wie ich das jetzt verstanden habe sollte es in etwa so aussehen:


```
public void JFileChooser() {
	
	//Create a file chooser with default open directory
	final JFileChooser fc = new JFileChooser("C:\\");
	fc.setFileFilter(new HTMLFileFilter());
	//In response to a button click:
	int returnVal = fc.showOpenDialog(jMenuItemOpenProfile);

	if( returnVal == JFileChooser.APPROVE_OPTION ) {
		File returnOpenProfilePath = fc.getSelectedFile();
		//initComponents();
		jTreeProfile = initProfileDescriptionGUI(
				returnOpenProfilePath.getAbsolutePath(),
				jTreeProfile,jTextPaneItemInfCim,jTextPaneItemInfDesc,jScrollPaneProfile);
	}
	}
	
	private void jMenuItemOpenProfileActionPerformed(java.awt.event.ActionEvent evt) {                                                     
	JFileChooser();
	}
```

jedoch weiss ich nicht wie ich es machen sollte das er nicht jedes mal den Pfad überschreibt...


Sry bin Anfänger, ist sicherlich relativ einfach, aber .... 

Gruss 
Iphone007


----------



## Michael... (15. Apr 2010)

Nein. Jetzt hast Du den ganzen Code in eine Methode ausgelagert (Methodennamen beginnen üblicherweise mit einem Kleinbuchstaben und sind sprechend, z.B. createFileChooser()) es wird aber dennoch mit jedem Buttonclick ein neuer FileChooser erzeugt. fc muss eine Instanzvariable Deiner Klasse werden. So in etwa:

```
public class MyClass {
    private JFileChooser fileChooser;
    public MyClass() {
        fileChooser = new JFileChooser("C:\\");
        fileChooser.setFileFilter...
        ...
        button.addActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent evt) {
                 fileChooser.showOpenDialog...
                 ...
             }
        });
    }
}
```


----------



## Tomate_Salat (15. Apr 2010)

iPhone007 hat gesagt.:


> @hansmueller
> Das dachte ich auch, dies ist mein Plan B, aber ich dachte das es einfachen und sauberer geht deswegen will ich es zuerst irgendwie anders, einfacher versuchen.



Plan B?! Was passiert den mit dem ausgewählten Pfad? Wird der einfach verworfen, wird der dem Benutzer überhaupt angezeigt? 

Wenn ich diese Komponente benutzt habe, dann eigentl. immer in Zusammenarbeit mit einem JTextField um dem Benutzer den Pfad anzuzeigen. Da kann der Benutzer ggf. den Pfad noch anpassen. Ist der Pfad existent, orientiert sich der FileChooser auch an diesem. Ansonsten wie hier schon gesagt wurde: Den Chooser nicht n-mal neu initalisieren, dann kann er auch von seinem zuletzt gewählten Pfad aus die Strukturen anzeigen, sollte der eingegebene Pfad nicht existent sein

Ich persönlich hasse es, wenn ich einen Pfad im FileChooserDialog sich von dem im Textfeld unterscheidet. 

MFG

Tomate_Salat


----------

