I'm looking for a simple, cross-platform way, on the JVM, to get the appropriate directories for storing application settings and cache data. E.g., on Linux under the XDG specs:
~/.config/appname
~/.cache/appname
Windows stuff goes in C\Users\user\Application Data
or some such (on Win 7); I gather that Mac puts stuff under ~/Library/Application Settings
.
Is there a cross-platform call to get these path locations? I haven't been able to find one, though I find several questions asking about it. Is there some library that has implemented the correct logic for most common desktop platforms?
Worst case, I can just look up user.home
and pretend everything is an XDG-based Linux environment. But if it's easy to get the right directories for the user's OS, I'd like to do so.
We basically set up a utility class that provides this information, mostly based on the user.home
and os.name
system property.
We have a series of methods that allow us to build up a path location, something like...
SystemUtilities.getApplicationSettingsPath("Name of my awesome app");
The FileSystemView
class is the only one I know that contains access to some general directories like this, and is cross-platform. Refer to the documentation here
This class contains some method that might be helpful, such as getHomeDirectory()
and getDefaultDirectory()
. This class is used by the JFileChooser
for Swing interfaces. I know it doesn't directly point to the config and cache directories, but it might be a step in the right direction for you.
For my own apps, I take the next-best approach by trying to make all the config and settings contained within the application itself - ie. create a "config" directory under the directory where the application is installed. Even though its not a central location for config for the whole OS, at least it keeps it within the java application context.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With