Java:System.getenv(“APPDATA”)返回null,现在是什么?

时间:2011-04-23 15:49:13

标签: java windows

我刚刚发现当一个Java程序在Windows上通过“Run As ...”(来自可执行文件的上下文菜单)作为不同的用户启动时,对System.getenv("APPDATA")的调用将返回{{1} },而不是通常的应用程序数据文件夹。

现在,当涉及到Windows文件夹等时,我有点像菜鸟,所以我的问题是,当我的程序必须能够将数据存储在某处以便正常工作时,我应该如何处理这种情况?更具体地说,如果null返回System.getenv("APPDATA"),我甚至允许存储任何数据,如果是,那么在哪里?提前谢谢!

3 个答案:

答案 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没有提取它。