如何在Java中获取本地应用程序数据文件夹?

smf*_*f68 46 java windows shell

可能重复:
获取本地应用程序数据目录路径的跨平台方式是什么?

我正在寻找一种方法来获取本地应用程序数据文件夹的位置,这是一个特殊的Windows文件夹,用Java.遗憾的是,以下内容仅适用于具有默认设置的英文版Windows XP:

System.getProperty("user.home") + "\\Local Settings\\Application Data"
Run Code Online (Sandbox Code Playgroud)

我想拥有的是.NET中的类似内容:

System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Run Code Online (Sandbox Code Playgroud)

有没有办法在不必调用Windows Shell API的SHGetSpecialFolderLocation的情况下执行此操作?

Rya*_*des 75

System.getenv("APPDATA")
Run Code Online (Sandbox Code Playgroud)

("本地设置"文件夹似乎没有env变量,但是这将为您提供"应用程序数据"文件夹)

  • 提问者要求的东西是"一个特殊的Windows文件夹".所以我不相信这需要跨平台 (24认同)
  • 请注意,APPDATA环境变量在通过"运行方式..."启动的应用程序中不可用. (8认同)
  • 刚刚检查过,很遗憾,LOCALAPPDATA在Windows XP中不可用. (5认同)
  • 只是理解APPDATA环境变量是一个只有Windows的构造,但是有问题的应用程序是java,所以它应该表面上是跨平台的. (2认同)

Fre*_*rik 11

从Windows 95开始,不推荐读取"Shell文件夹"注册表项.注册表项包含一条说明"!不要使用此注册表项.请改用SHGetFolderPath或SHGetKnownFolderPath." 我不得不在Vista系统上发现这一点,除了警告说明之外,所有键都丢失了.

这个相关的stackoverflow答案在Windows上使用JNA解决了这个问题,这是我目前正在使用的解决方案.

  • 该密钥从Windows 95开始被弃用."Shell文件夹"密钥仅用于允许1994年编写的四个程序继续在Windows 95的RTM版本上运行http://blogs.msdn.com/b/oldnewthing/archive/ 2003/11/03/55532.aspx (6认同)

小智 11

以下是什么

String dataFolder = System.getenv("LOCALAPPDATA");
Run Code Online (Sandbox Code Playgroud)

我有一种情况,这不是在"user.home"