我已经使用TMP
环境变量来控制gcc写入临时文件的地方,但我似乎无法找到java的createTempFile API的等价物。
这样的环境变量是否存在?
答案 0 :(得分:107)
嗯 - 因为这是由JVM处理的,所以我深入研究了OpenJDK VM源代码,认为OpenJDK可能做的是模仿Java 6及之前所做的事情。除了在Windows上之外,还有一种方法可以做到这一点。
在Windows上,OpenJDK的get_temp_directory()
函数对GetTempPath()
进行Win32 API调用;这就是在Windows上,Java反映了TMP
环境变量的价值。
在Linux和Solaris上,相同的get_temp_directory()
函数会返回静态值/tmp/
。
我不知道实际的JDK6是否遵循这些确切的约定,但是通过每个列出的平台上的行为,它们似乎都是这样。
答案 1 :(得分:96)
默认临时文件目录由系统属性java.io.tmpdir指定。在UNIX系统上,此属性的默认值通常为“/ tmp”或“/ var / tmp”;在Microsoft Windows系统上,它通常是“c:\ temp”。调用Java虚拟机时,可以为此系统属性提供不同的值,但不保证对此属性的编程更改会对此方法使用的临时目录产生任何影响。
要指定java.io.tmpdir
System属性,可以按如下方式调用JVM:
java -Djava.io.tmpdir=/path/to/tmpdir
默认情况下,此值应来自Windows系统上的TMP
环境变量
答案 2 :(得分:55)
您可以设置_JAVA_OPTIONS
环境变量。例如在bash中,这可以解决问题:
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
我将它放入我的bash登录脚本中,似乎可以解决这个问题。
答案 3 :(得分:34)
使用
$ java -XshowSettings
Property settings:
java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir = /tmp
答案 4 :(得分:26)
它不是环境变量,但仍然可以控制临时目录:
-Djava.io.tmpdir
例如:
java -Djava.io.tmpdir=/mytempdir
答案 5 :(得分:15)
要清楚这里发生了什么:
设置临时目录位置的推荐方法是设置名为“java.io.tmpdir”的System属性,例如:通过向-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 :(得分:0)
如果您查看 JDK 的源代码,您会发现对于 unix 系统,属性是在 compile 时间从 path.h 或 hard coded 读取的。对于 windows,来自 win32 的函数 GetTempPathW
返回 tmpdir
名称。
对于 posix 系统,您可能希望 standard TMPDIR
能够工作,但事实并非如此。您可以通过运行 TMPDIR
TMPDIR=/mytmp java -XshowSettings
答案 7 :(得分:0)
我们可以更改默认的tomcat文件上传位置,如
我们必须设置环境变量,如:CATALINA_TEMPDIR = YOUR FILE UPLOAD LOCATION。 这个位置会改变这里的路径:java -Djava.io.tmpdir=/path/to/tmpdir
答案 8 :(得分:-1)
在UNIX终端上使用以下命令:
java -XshowSettings
这将显示所有Java属性和系统设置。
在此查找java.io.tmpdir
值。