Zac*_*sch 98 java configuration environment-variables temp
我已经使用TMP环境变量来控制gcc写入临时文件的地方,但我似乎找不到java的createTempFile API 的等价物.
这样的环境变量是否存在?
del*_*ego 111
嗯 - 因为这是由JVM处理的,我稍微深入研究了OpenJDK VM源代码,认为OpenJDK可能做的事情模仿了Java 6及之前做过的事情.除了Windows之外,还有一种方法可以做到这一点.
在Windows上,OpenJDK的get_temp_directory()函数调用Win32 API GetTempPath(); 这就是在Windows上,Java反映了TMP环境变量的价值.
在Linux和Solaris上,相同的get_temp_directory()函数返回静态值/tmp/.
我不知道实际的JDK6是否遵循这些确切的约定,但是通过每个列出的平台上的行为,它们似乎都是这样.
Bry*_*yle 103
缺省临时文件目录由系统属性java.io.tmpdir指定.在UNIX系统上,此属性的默认值通常为"/ tmp"或"/ var/tmp"; 在Microsoft Windows系统上,它通常是"c:\ temp".调用Java虚拟机时,可以为此系统属性提供不同的值,但不保证对此属性的编程更改会对此方法使用的临时目录产生任何影响.
要指定java.io.tmpdirSystem属性,可以按如下方式调用JVM:
java -Djava.io.tmpdir=/path/to/tmpdir
Run Code Online (Sandbox Code Playgroud)
默认情况下,此值应来自TMPWindows系统上的环境变量
Joh*_*ohn 61
您可以设置_JAVA_OPTIONS环境变量.例如在bash中这可以解决问题:
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
Run Code Online (Sandbox Code Playgroud)
我把它放到我的bash登录脚本中,它似乎可以解决问题.
小智 36
使用
$ java -XshowSettings
Property settings:
java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir = /tmp
Run Code Online (Sandbox Code Playgroud)
Boz*_*zho 27
它不是环境变量,但仍然可以控制temp目录:
-Djava.io.tmpdir
Run Code Online (Sandbox Code Playgroud)
例:
java -Djava.io.tmpdir=/mytempdir
Run Code Online (Sandbox Code Playgroud)
Ste*_*n C 16
要清楚这里发生了什么:
设置临时目录位置的推荐方法是设置名为"java.io.tmpdir"系统属性,例如,通过给选项-Djava.io.tmpdir=/mytempdir的java命令.也可以通过调用模块System.setProperty("java.io.tmpdir", "/mytempdir)沙箱安全问题从程序中更改属性.
如果未在启动时显式设置"java.io.tmpdir"属性,则JVM会将其初始化为特定于平台的默认值.对于Windows,默认值是通过调用Win32 API方法获得的.对于Linux/Solaris,默认显然是硬连线的.对于其他JVM,它可能是其他东西.
根据经验,"TMP"环境变量适用于Windows(使用当前的JVM),但不适用于其他平台.如果您关心可移植性,则应明确设置系统属性.
小智 6
在 UNIX 终端上使用以下命令:
java -XshowSettings
Run Code Online (Sandbox Code Playgroud)
这将显示所有 java 属性和系统设置。在此寻找java.io.tmpdir价值。
| 归档时间: |
|
| 查看次数: |
273393 次 |
| 最近记录: |