![]() |
VOOZH | about |
👁 Maven Central
👁 API documentation
👁 actively developed
👁 License: MPL-2.0
The library provides the location of these directories by leveraging the mechanisms defined by
This library is written in Java, and runs on the JVM (≥ 6).
A version of this library implemented in Rust is provided by directories-rs.
Add the library as a dependency to your project:
<dependency>
<groupId>dev.dirs</groupId>
<artifactId>directories</artifactId>
<version>26</version>
</dependency>
compile 'dev.dirs:directories:26'
"dev.dirs" % "directories" % "26"
The library itself is built against Java 6 to allow for the widest possible usage scenarios. It can be used on any Java version >= 6.
Library run by user Alice:
importdev.dirs.ProjectDirectories;importdev.dirs.BaseDirectories;importdev.dirs.UserDirectories;ProjectDirectoriesmyProjDirs=ProjectDirectories.from("com","Foo Corp","Bar App");myProjDirs.configDir;// Lin: /home/alice/.config/barapp// Mac: /Users/Alice/Library/Application Support/com.Foo-Corp.Bar-App// Win: C:\Users\Alice\AppData\Roaming\Foo Corp\Bar App\configBaseDirectoriesbaseDirs=BaseDirectories.get();baseDirs.executableDir;// Lin: /home/alice/.local/bin// Mac: null// Win: nullUserDirectoriesuserDirs=UserDirectories.get();userDirs.audioDir;// Lin: /home/alice/Music// Mac: /Users/Alice/Music// Win: C:\Users\Alice\MusicBaseDirectories.get(), UserDirectories.get() or
ProjectDirectories.from(). Subsequent changes to the state of the system are not reflected in
instances created prior to such a change.executableDir is specified to provide the path to a user-writable directory for binaries.null on macOS and Windows.fontDir is specified to provide the path to a user-writable directory for fonts.null Windows.runtimeDir is specified to provide the path to a directory for non-essential runtime data.
It is required that this directory is created when the user logs in, is only accessible by the
user itself, is deleted when the user logs out, and supports all filesystem features of the
operating system.null on macOS and Windows.BaseDirectoriesThe intended use-case for BaseDirectories is to query the paths of user-invisible standard directories
that have been defined according to the conventions of the operating system the library is running on.
If you want to compute the location of cache, config or data folders for your own application or project, use ProjectDirectories instead.
| Field name | Value on Linux / BSD / Solaris | Value on Windows | Value on macOS |
|---|---|---|---|
homeDir |
$HOME |
{FOLDERID_UserProfile} |
$HOME |
cacheDir |
$XDG_CACHE_HOME or $HOME/.cache |
{FOLDERID_LocalApplicationData} |
$HOME/Library/Caches |
configDir |
$XDG_CONFIG_HOME or $HOME/.config |
{FOLDERID_ApplicationData} |
$HOME/Library/Application Support |
dataDir |
$XDG_DATA_HOME or $HOME/.local/share |
{FOLDERID_ApplicationData} |
$HOME/Library/Application Support |
dataLocalDir |
$XDG_DATA_HOME or $HOME/.local/share |
{FOLDERID_LocalApplicationData} |
$HOME/Library/Application Support |
executableDir |
$XDG_BIN_HOME or $XDG_DATA_HOME/../bin or $HOME/.local/bin |
null |
null |
preferenceDir |
$XDG_CONFIG_HOME or $HOME/.config |
{FOLDERID_ApplicationData} |
$HOME/Library/Preferences |
runtimeDir |
$XDG_RUNTIME_DIR or null |
null |
null |
UserDirectoriesThe intended use-case for UserDirectories is to query the paths of user-facing standard directories
that have been defined according to the conventions of the operating system the library is running on.
| Field name | Value on Linux / BSD | Value on Windows | Value on macOS |
|---|---|---|---|
homeDir |
$HOME |
{FOLDERID_UserProfile} |
$HOME |
audioDir |
XDG_MUSIC_DIR |
{FOLDERID_Music} |
$HOME/Music |
desktopDir |
XDG_DESKTOP_DIR |
{FOLDERID_Desktop} |
$HOME/Desktop |
documentDir |
XDG_DOCUMENTS_DIR |
{FOLDERID_Documents} |
$HOME/Documents |
downloadDir |
XDG_DOWNLOAD_DIR |
{FOLDERID_Downloads} |
$HOME/Downloads |
fontDir |
$XDG_DATA_HOME/fonts or $HOME/.local/share/fonts |
null |
$HOME/Library/Fonts |
pictureDir |
XDG_PICTURES_DIR |
{FOLDERID_Pictures} |
$HOME/Pictures |
publicDir |
XDG_PUBLICSHARE_DIR |
{FOLDERID_Public} |
$HOME/Public |
templateDir |
XDG_TEMPLATES_DIR |
{FOLDERID_Templates} |
null |
videoDir |
XDG_VIDEOS_DIR |
{FOLDERID_Videos} |
$HOME/Movies |
ProjectDirectoriesThe intended use-case for ProjectDirectories is to compute the location of cache, config or data folders for your own application or project,
which are derived from the standard directories.
| Field name | Value on Linux / BSD | Value on Windows | Value on macOS |
|---|---|---|---|
cacheDir |
$XDG_CACHE_HOME/<project_path> or $HOME/.cache/<project_path> |
{FOLDERID_LocalApplicationData}/<project_path>/cache |
$HOME/Library/Caches/<project_path> |
configDir |
$XDG_CONFIG_HOME/<project_path> or $HOME/.config/<project_path> |
{FOLDERID_ApplicationData}/<project_path>/config |
$HOME/Library/Application Support/<project_path> |
dataDir |
$XDG_DATA_HOME/<project_path> or $HOME/.local/share/<project_path> |
{FOLDERID_ApplicationData}/<project_path>/data |
$HOME/Library/Application Support/<project_path> |
dataLocalDir |
$XDG_DATA_HOME/<project_path> or $HOME/.local/share/<project_path> |
{FOLDERID_LocalApplicationData}/<project_path>/data |
$HOME/Library/Application Support/<project_path> |
preferenceDir |
$XDG_CONFIG_HOME/<project_path> or $HOME/.config/<project_path> |
{FOLDERID_ApplicationData}/<project_path>/config |
$HOME/Library/Preferences/<project_path> |
runtimeDir |
$XDG_RUNTIME_DIR/<project_path> |
null |
null |
The specific value of <project_path> is computed by the
ProjectDirectories.from(String qualifier,
String organization,
String application)
method and varies across operating systems. As an example, calling
ProjectDirectories.from("org" /*qualifier*/,
"Baz Corp" /*organization*/,
"Foo Bar-App" /*application*/)
results in the following values:
| Value on Linux | Value on Windows | Value on macOS |
|---|---|---|
"foobar-app" |
"Baz Corp/Foo Bar-App" |
"org.Baz-Corp.Foo-Bar-App" |
The ProjectDirectories.fromPath method allows the creation of ProjectDirectories instances directly from a project path.
This argument is used verbatim and is not adapted to operating system standards.
The use of ProjectDirectories.fromPath is strongly discouraged, as its results will not follow operating system standards on at least two of three platforms.
The version number of this library consists of a whole number, which is incremented with each release.
dev.dirs:directories releasenull if a directory path can't be retrieved on Windows,
instead of throwing an exception. Workaround for #43. Thanks @fthomas!-NoProfile to powershell.exe Fixes #36. Thanks @alexarchambault!configDir on macOS has been adjusted:
BaseDirectories#configDir and ProjectDirectories#configDir have been changed to use the Application Support directory,
as suggested by Apple documentation.BaseDirectories#configDir or ProjectDirectories#configDir to store files,
it may be necessary to write code that migrates the files to the new location.
(Alternative: change usages of configDir to preferenceDir to keep the old (pre-v20) behavior.)configDir on non-macOS platforms has not been changed.BaseDirectories#preferenceDir and ProjectDirectories#preferenceDir have been added:
Preferences directory on macOS, like configDir did before version 20.
– preferenceDir behaves identical to configDir on non-macOS platforms.soc.github.iosoc.github.io releasePlease refer to the legacy branch for the documentation and artifact coordinates of the soc.github.io artifact.
downloadDir and publicDir are now supported.BaseDirectories and UserDirectories to instance fields.
Instances can be created with BaseDirectories.get() and UserDirectories.get().audioDir, desktopDir, documentDir, pictureDir and videoDir.downloadDir and publicDir return null on Windows, as the SpecialFolder enumeration lacks entries for these values.ProjectDirectories paths for cacheDir, configDir and dataDir.ProjectDirectories paths for cacheDir, configDir, dataDir and dataLocalDir if XDG environment variables are set.UserDirectories paths for fontDir if XDG environment variables are set.BaseDirectories into BaseDirectories (cache, config, ...) and UserDirectories (audio,
video, ...).BaseDirectories and UserDirectories are now public.UserDirectories are now null if no values can be retrieved from xdg-user-dirs,
instead of falling back on hard-coded values.System.getProperty("user.home") instead of
System.getenv("HOME"), improving reliability and portability.BaseDirectories and ProjectDirectories:| Method | Old value | New Value |
|---|---|---|
BaseDirectories.cacheDir |
{SpecialFolder.LocalApplicationData}/cache |
{SpecialFolder.LocalApplicationData} |
ProjectDirectories#dataDir |
{SpecialFolder.ApplicationData}/<project_path> |
{SpecialFolder.ApplicationData}/<project_path>/data |
ProjectDirectories#dataLocalDir |
{SpecialFolder.LocalApplicationData}/<project_path> |
{SpecialFolder.LocalApplicationData}/<project_path>/data |
| Old name | New name |
|---|---|
dataDir |
dataLocalDir |
dataRoamingDir |
dataDir |
executablesDir |
executableDir |
documentsDir |
documentDir |
downloadsDir |
downloadDir |
fontsDir |
fontDir |
musicDir |
audioDir |
picturesDir |
pictureDir |
templatesDir |
templateDir |
videosDir |
videoDir |
ProjectDirectories factory methods have been overhauled and replaced with a single from(String qualifier, String organization, String project) method.
Changes to the selection of local/roaming data directories:
dataDir selects the roaming data directory on Windows (no change on Linux or macOS).dataLocalDir selects the local data directory on Windows (no change on Linux or macOS).ProjectDirectories received a runtimeDir field.
ProjectDirectories field names dropped the project prefix.
Changes to the directory for executables:
executableDir has been dropped on macOS.executableDir considers $XDG_BIN_HOME now, before falling back to $XDG_DATA_HOME/../bin and $HOME/.local/bin.