我刚刚发现当一个Java程序在Windows上通过“Run As ...”(来自可执行文件的上下文菜单)作为不同的用户启动时,对System.getenv("APPDATA")
的调用将返回{{1} },而不是通常的应用程序数据文件夹。
现在,当涉及到Windows文件夹等时,我有点像菜鸟,所以我的问题是,当我的程序必须能够将数据存储在某处以便正常工作时,我应该如何处理这种情况?更具体地说,如果null
返回System.getenv("APPDATA")
,我甚至允许存储任何数据,如果是,那么在哪里?提前谢谢!
答案 0 :(得分:3)
好的,我使用JNA解决了自己的问题:
com.sun.jna.platform.win32.Shell32Util.getFolderPath(int nFolder)
其中nFolder = 0x001a
表示应用程序数据文件夹,nFolder = 0x001c
表示本地应用程序数据文件夹。在Windows XP上,输出为
C:\ Documents and Settings \ [UserName] \ Application Data
C:\ Documents and Settings \ [UserName] \ Local Settings \ Application Data
最重要的是,当程序通过null
启动时,这不会返回Run As
。
答案 1 :(得分:2)
是的,您始终可以存储数据。您可以使用temp directory存储数据。您可以通过System.getProperty("java.io.tmpdir");
获取临时目录。
答案 2 :(得分:2)
另外如果你在windows中设置了一个环境变量,我注意到在我重新启动操作系统之前java没有提取它。