19

When using java applications, every time I open a dialog box, the starting directory is always my home directory. Is there any way to make it remember the last used directory? Alternately, are there 'improved' java file selection dialogs that allow type-to-search or any of the features that are standard in most other application file selection dialogs?

EDIT: I think the answers posted address the question for writing java applications, but not for a user. Perhaps it's not possible for the user to change the file browser interface, but I'd like to know that. In case it matters, I have a few specific examples in mind (Amazon AWS uploader) but I have observed that behavior in most java applications that use a file browser.

keflavich
  • 16,950
  • 20
  • 79
  • 110

5 Answers5

40

JFileChooser does not remember it. However, Java provides a Preferences API

Preferences prefs = Preferences.userRoot().node(getClass().getName());
JFileChooser chooser = new JFileChooser(prefs.get(LAST_USED_FOLDER,
    new File(".").getAbsolutePath()));
int returnVal = chooser.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
    // do something
    prefs.put(LAST_USED_FOLDER, chooser.getSelectedFile().getParent());
}
jmattheis
  • 9,399
  • 10
  • 48
  • 56
Archimedes Trajano
  • 28,830
  • 14
  • 134
  • 195
16

Store the file chooser as a class attribute. When it is re-opened, the following will be preserved.

  1. The directory.
  2. The place in the directory to where the user had scrolled.
  3. The selected file filter.
  4. The size.
  5. The location on screen.
  6. The PLAF.
  7. ..

Is there any way to make it remember the last used directory?

Of course, if you mean persist the state between runs, there are a number of alternative forms of storing the details, and places/ways to store them. See this answer for an example of storing the bounds of a JFrame using a Properties file.


Perhaps it's not possible for the user to change the file browser interface, ..

What 'user'? Do you mean the developer who uses one in an app.?

Maybe what you need is to implement your own file chooser. If that is the case, you might start with the FileBro code.

Community
  • 1
  • 1
Andrew Thompson
  • 166,747
  • 40
  • 210
  • 420
  • +1 so simple. In other words, only create one and just reuse it over and over so it retains its state (selection, location, etc.) – Nate W. Nov 27 '11 at 04:49
  • By 'user', I meant end-user, not developer. I am frequently forced to use java applications written by others that have file browser interfaces I don't like. I suppose if I can get access to the source, I can change the file browser and repackage the code, so to that end your answer is pretty helpful. – keflavich Nov 28 '11 at 17:13
9

Swing JFileChooser has an method to set the initial directory. setCurrentDirectory(File dir) After the file has been chosen you can get the selected directory by calling getCurrentDirectory and store it in some config file of your app.

Funky coder
  • 5,413
  • 2
  • 29
  • 55
2

You can cache the last dir location in application and while opening the file chooser specify the default location by setCurrentDirectory

jmj
  • 232,312
  • 42
  • 391
  • 431
0

Here i used a simple code with directory dialog to open with last use directory

IDialogSettings dialogSettings = Activator.getDefault().getDialogSettings(); 
    String lastUsedPath = dialogSettings.get(IAntUIConstants.DIALOGSTORE_LASTANTHOME);
    if (lastUsedPath == null) {
        lastUsedPath = "c:\\";
    }
    DirectoryDialog dialog = new DirectoryDialog(Display.getDefault().getActiveShell());
    dialog.setFilterPath(lastUsedPath);
    String location = dialog.open();
    if (location == null) {
        return;
    }
    dialogSettings.put(IAntUIConstants.DIALOGSTORE_LASTANTHOME, location); 
      AntCorePreferences preferences = AntCorePlugin.getPlugin().getPreferences(); 
      String defaultHome = preferences.getAntHome(); 
      if (location.equalsIgnoreCase(defaultHome)) { 
          location = null; 
      } 
V Kash Singh
  • 419
  • 4
  • 4