Eclipse RCP:InternalPlatform.getDefault().getUserLocation() 没有 return C:\Users\username\AppData\Roaming

Eclipse RCP: InternalPlatform.getDefault().getUserLocation() doesen't return C:\Users\username\AppData\Roaming

我目前正在将 Eclipse 3.0 应用程序迁移到 4.4。用户数据过去和现在都应该存储在文件夹 C:\Users\username\AppData\Roaming\applicationname

应用程序正在使用以下代码读取目录:

public static String getUserDirectory()
{
  String directory = InternalPlatform.getDefault().getUserLocation().getFile();
  return directory;
}

我知道该代码已弃用,但以下代码 return 相同:

public static String getUserDirectory()
{
    String directory = Platform.getUserLocation().getURL().getFile();
    return directory;
}

它们都 return C:\Users\username\user 但正如我所说,用户数据应存储在 C:\Users\username\AppData\Roaming\applicationname。这些方法的行为是否发生了变化?

如何实现我将我的用户数据存储在 C:\Users\username\AppData\Roaming\applicationname 下并且我的应用程序仍然可以找到该目录?

我知道这与我不完全理解的环境变量有关。

我手头没有 3.x 目标平台可以比较,但 C:\Users\username\user 看起来完全错误。

如果您对细节感兴趣,EquinoxLocations 的构造函数会计算 userLocation 并在未指定默认值的情况下将文字 'user' 添加到用户的主目录。

因此,如果您使用 -user @user.home-Dosgi.user.area=@user.home 启动您的应用程序,用户位置将设置为 C:\Users\username\。仍然不是您要找的东西,但至少是一个合理的值。

我认为这是 Equinox 中的一个 bug,建议提交一个 bugzilla。如果事实证明这种方法有充分的理由,错误条目仍将作为 documentation/reasoning.

同时您可以通过System.getenv( "APPDATA" )获得Windows上的主目录。根据 this post 它将 return 漫游主目录

我通过在 config.ini.product 文件的“配置”选项卡中添加三个属性解决了这个问题:

  • osgi.configuration.area = @user.home/AppData/Roaming/ApplicationName/...

  • osgi.user.area = @user.home/AppData/Roaming/ApplicationName/...

  • osgi.instance.area = @user.home/AppData/Roaming/ApplicationName

现在我的问题中所述的方法读取由这些属性配置的路径,生成的 config.ini 文件看起来与使用 Eclipse 3.0 的旧版本完全一样。