控制java.io.tmpdir的环境变量?

控制java.io.tmpdir的环境变量?,java,configuration,environment-variables,temp,Java,Configuration,Environment Variables,Temp,我使用了TMP环境变量来控制gcc将其临时文件写入的位置,但我似乎找不到与java的API等效的变量 这样的环境变量存在吗?它不是环境变量,但仍然让您可以控制temp dir: -Djava.io.tmpdir 例: java-Djava.io.tmpdir=/mytempdir 根据 默认临时文件目录由系统属性java.io.tmpdir指定。在UNIX系统上,此属性的默认值通常为“/tmp”或“/var/tmp”;在Microsoft Windows系统上,它通常是“c:\temp”。调用

我使用了
TMP
环境变量来控制gcc将其临时文件写入的位置,但我似乎找不到与java的API等效的变量


这样的环境变量存在吗?

它不是环境变量,但仍然让您可以控制temp dir:

-Djava.io.tmpdir
例:

java-Djava.io.tmpdir=/mytempdir
根据

默认临时文件目录由系统属性java.io.tmpdir指定。在UNIX系统上,此属性的默认值通常为“/tmp”或“/var/tmp”;在Microsoft Windows系统上,它通常是“c:\temp”。调用Java虚拟机时,可能会为该系统属性指定不同的值,但对该属性的编程更改不保证对该方法使用的临时目录有任何影响

要指定
java.io.tmpdir
系统属性,可以按如下方式调用JVM:

java -Djava.io.tmpdir=/path/to/tmpdir
默认情况下,这个值应该来自Windows系统上的
TMP
环境变量

Hmmm——因为这是由JVM处理的,所以我稍微深入研究了一下OpenJDK VM源代码,认为OpenJDK所做的可能与Java 6及更早版本所做的相似。除了在Windows上,没有其他方法可以做到这一点,这并不令人放心

在上,OpenJDK的
get_temp_directory()
函数对
GetTempPath()
进行Win32 API调用;这就是在Windows上,Java如何反映
TMP
环境变量的值

在和上,相同的
get_temp_directory()
函数返回一个静态值
/tmp/


我不知道实际的JDK6是否遵循这些确切的约定,但从列出的每个平台上的行为来看,它们似乎都遵循这些约定。

要了解这里发生了什么:

  • 设置临时目录位置的推荐方法是设置名为“java.io.tmpdir”的系统属性,例如,为
    java
    命令提供选项
    -Djava.io.tmpdir=/mytempdir
    。通过调用
    System.setProperty(“java.io.tmpdir”,“/mytempdir”)
    …modulo sandbox安全问题,也可以从程序中更改属性

  • 如果启动时未显式设置“java.io.tmpdir”属性,JVM会将其初始化为特定于平台的默认值。对于Windows,默认值是通过调用Win32 API方法获得的。对于Linux/Solaris,默认值显然是硬连线的。对于其他JVM,它可能是其他的


根据经验,“TMP”环境变量可以在Windows(当前JVM)上工作,但不能在其他平台上工作。如果您关心可移植性,则应显式设置系统属性。

您可以设置
\u JAVA\u选项
环境变量。例如,在bash中,这可以实现以下功能:

export\u JAVA\u OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
我把它放到我的bash登录脚本中,它似乎做到了这一点。

使用

$java-XshowSettings
属性设置:
java.home=/home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir=/tmp

在UNIX终端上使用以下命令:

java -XshowSettings
这将显示所有java属性和系统设置。
在此查找
java.io.tmpdir
值。

如果您查看JDK的源代码,您可以看到,对于unix系统,该属性是在时间从路径中读取的。h或。对于函数
gettempathw
from,返回
tmpdir
名称


对于posix系统,您可能希望
TMPDIR
工作,但事实并非如此。您可以确认运行
TMPDIR=/mytmp java-XshowSettings

时未使用
TMPDIR
,我们可以更改默认的tomcat文件上载位置,如下所示:

我们必须设置环境变量,如:CATALINA_TEMPDIR=您的文件上载位置。
这个位置将改变路径:java-Djava.io.tmpdir=/path/to/tmpdir

这并没有回答我的问题。是否有一个环境变量可以控制这一点?尽管您进行了编辑,Bryan,java.io.tmpdir在Mac或Ubuntu上肯定没有遵循tmpdir环境变量(6.06测试).Oy和另一个编辑,使所有这些评论看起来都毫无意义。@Zach。答案是特定于平台的。答案并不是那么简单,而且这个答案仍然不正确。在Windows上,
java.io.tmpdir
是使用Windows SDK函数
GetTempPath
()如果前面的每一个都没有定义,它将解析为TMP或TEMP或USERPROFILE或Windows目录。实际的链接是java.lang.String、java.io.File)当我放入URL时(或当我用%28和%29替换括号时),Stackoverflow没有做正确的事情。我知道使用短url很糟糕,但我觉得它总比没有链接好。我修复了链接。正确的做法也很好。谢谢。我想诀窍是用%20替换空格。我所做的就是跟踪你的链接,将url从我浏览器的地址栏中复制出来,然后粘贴到你的帖子中你的短链接所在的位置。要清楚,w您正在查看的是本机代码,它在JVM创建系统属性对象时为“java.io.tmpdir”属性提供默认值。这将被(例如)一个“-Djava.io.tmpdir=…”覆盖。。。选项。@StephenC,是的,这就是问题所在——OP正在寻找在没有自己设置属性的情况下如何设置属性的默认值(通过JVM的
-Djava.io.tmpdir
命令行选项),以及该默认值是否受到环境值的影响。正如人们所观察到的,在Windows上,它受到
TMP
环境变量的影响,但不清楚其他操作系统是否存在未知变量。看起来没有,至少考虑到我们