125

我已经使用TMP环境变量来控制诸如 gcc 将其写入临时文件的位置,但我似乎找不到 java 的createTempFile API 的等价物。

这样的环境变量是否存在?

4

9 回答 9

131

根据java.io.FileJava Docs

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

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

java -Djava.io.tmpdir=/path/to/tmpdir

默认情况下,此值应来自TMPWindows 系统上的环境变量

于 2009-12-17T19:54:36.197 回答
125

嗯——因为这是由 JVM 处理的,所以我深入研究了 OpenJDK VM 源代码,认为 OpenJDK 所做的可能模仿了 Java 6 及之前所做的。除了在 Windows 上之外,还有其他方法可以做到这一点,这并不令人放心。

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

LinuxSolaris上,相同的get_temp_directory()函数返回静态值/tmp/.

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

于 2009-12-17T21:02:13.457 回答
67

你可以设置你的_JAVA_OPTIONS环境变量。例如,在 bash 中,这可以解决问题:

export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir

我将它放入我的 bash 登录脚本中,它似乎可以解决问题。

于 2011-04-03T16:38:01.727 回答
42

采用

$ java -XshowSettings
Property settings:
    java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
    java.io.tmpdir = /tmp
于 2013-08-07T01:23:59.220 回答
28

它不是环境变量,但仍然可以让您控制临时目录:

-Djava.io.tmpdir

前任。:

java -Djava.io.tmpdir=/mytempdir
于 2009-12-17T19:53:56.713 回答
18

要清楚这里发生了什么:

  • 设置临时目录位置的推荐方法是设置名为“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),但不适用于其他平台。如果您关心可移植性,则应显式设置系统属性。

于 2009-12-18T00:15:18.750 回答
6

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

java -XshowSettings

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

于 2018-06-20T03:22:50.937 回答
0

如果查看 JDK 的源代码,您可以看到对于 unix 系统,该属性是在编译时从 paths.h 或硬编码中读取的。对于windowsGetTempPathW ,来自win32的函数返回tmpdir名称。

对于 posix 系统,您可能希望该标准 TMPDIR能够正常工作,但事实并非如此。您可以通过运行确认TMPDIR未使用TMPDIR=/mytmp java -XshowSettings

于 2021-01-06T09:54:29.550 回答
0

我们可以更改默认的tomcat文件上传位置,如

我们必须设置环境变量,如:CATALINA_TEMPDIR = YOUR FILE UPLOAD LOCATION。此位置将更改此处的路径:java -Djava.io.tmpdir=/path/to/tmpdir

于 2021-02-04T04:32:01.527 回答