我已经使用TMP
环境变量来控制诸如 gcc 将其写入临时文件的位置,但我似乎找不到 java 的createTempFile API 的等价物。
这样的环境变量是否存在?
我已经使用TMP
环境变量来控制诸如 gcc 将其写入临时文件的位置,但我似乎找不到 java 的createTempFile API 的等价物。
这样的环境变量是否存在?
默认临时文件目录由系统属性 java.io.tmpdir 指定。在 UNIX 系统上,该属性的默认值通常是“/tmp”或“/var/tmp”;在 Microsoft Windows 系统上,它通常是“c:\temp”。调用 Java 虚拟机时,可以为该系统属性赋予不同的值,但不保证对该属性的编程更改对该方法使用的临时目录有任何影响。
要指定java.io.tmpdir
System 属性,您可以按如下方式调用 JVM:
java -Djava.io.tmpdir=/path/to/tmpdir
默认情况下,此值应来自TMP
Windows 系统上的环境变量
嗯——因为这是由 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 是否遵循这些确切的约定,但从每个列出的平台上的行为来看,它们似乎确实如此。
你可以设置你的_JAVA_OPTIONS
环境变量。例如,在 bash 中,这可以解决问题:
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
我将它放入我的 bash 登录脚本中,它似乎可以解决问题。
采用
$ java -XshowSettings
Property settings:
java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir = /tmp
它不是环境变量,但仍然可以让您控制临时目录:
-Djava.io.tmpdir
前任。:
java -Djava.io.tmpdir=/mytempdir
要清楚这里发生了什么:
设置临时目录位置的推荐方法是设置名为“java.io.tmpdir”的系统属性,例如通过为命令提供-Djava.io.tmpdir=/mytempdir
选项java
。也可以通过调用System.setProperty("java.io.tmpdir", "/mytempdir)
... modulo 沙箱安全问题从程序中更改该属性。
如果您没有在启动时显式设置“java.io.tmpdir”属性,JVM 会将其初始化为特定于平台的默认值。对于 Windows,默认值是通过调用 Win32 API 方法获得的。对于 Linux / Solaris,默认值显然是硬连线的。对于其他 JVM,它可能是别的东西。
根据经验,“TMP”环境变量适用于 Windows(使用当前 JVM),但不适用于其他平台。如果您关心可移植性,则应显式设置系统属性。
在 UNIX 终端上使用以下命令:
java -XshowSettings
这将显示所有 java 属性和系统设置。在此寻找java.io.tmpdir
价值。
我们可以更改默认的tomcat文件上传位置,如
我们必须设置环境变量,如:CATALINA_TEMPDIR = YOUR FILE UPLOAD LOCATION。此位置将更改此处的路径:java -Djava.io.tmpdir=/path/to/tmpdir