Eclipse RCP:InternalPlatform.getDefault()。getUserLocation()doesen&t 39返回C:\ Users \ username \ AppData \ Roaming

时间:2015-12-18 10:50:50

标签: java eclipse-plugin environment-variables eclipse-rcp

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

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

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

我知道代码已弃用,但以下代码返回相同的内容:

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

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

我如何才能意识到我将用户数据存储在C:\Users\username\AppData\Roaming\applicationname下,而我的应用程序仍然可以找到该目录?

我知道这必须对我不完全理解的环境变量做些什么。

2 个答案:

答案 0 :(得分:1)

我手边没有3.x目标平台可供比较,但C:\Users\username\user看起来很不对劲。

如果您对详细信息感兴趣,EquinoxLocations的构造函数会计算userLocation,如果没有指定默认值,则将文字'user'添加到用户的主目录中。

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

我认为这是Equinox中的一个错误,建议提交bugzilla。如果事实证明这个appraoch有充分的理由,那么bug输入仍将作为文档/推理。

同时,您可以通过System.getenv( "APPDATA" )获取Windows上的主目录。根据{{​​3}},它将返回漫游主目录

答案 1 :(得分:0)

我通过在config.ini.product文件的Configuration选项卡中添加三个属性来解决问题:

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

  • osgi.user.area = @的user.home /应用程序数据/漫游/应用程序名称/...

  • osgi.instance.area = @的user.home /应用程序数据/漫游/应用程序名称

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