我目前正在将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
下,而我的应用程序仍然可以找到该目录?
我知道这必须对我不完全理解的环境变量做些什么。
答案 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的旧版本完全相同。