代码之家  ›  专栏  ›  技术社区  ›  Zach Hirsch

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

  •  91
  • Zach Hirsch  · 技术社区  · 15 年前

    我已经用过了 TMP 环境变量来控制GCC写的是临时文件,但我似乎找不到Java的等价物。 createTempFile 应用程序编程接口。

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

    7 回复  |  直到 6 年前
        1
  •  105
  •   David Foerster Umberto Salsi    9 年前

    因为这是由JVM处理的,所以我深入研究了OpenJDK VM源代码,认为OpenJDK所做的可能是Java 6和之前所做的。除了在窗户上,没有其他方法可以做到这一点,这并不令人安心。

    Windows ,OpenJDK的 get_temp_directory() 函数对进行Win32 API调用 GetTempPath() 这是如何在Windows、Java上体现的价值 TMP 环境变量。

    Linux Solaris 一样 获取_temp_目录() 函数返回静态值 /tmp/ .

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

        2
  •  94
  •   aholub7x    9 年前

    根据 java.io.File Java Docs

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

    指定 java.io.tmpdir 系统属性,您可以如下调用JVM:

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

    默认情况下,该值应来自 TMP Windows系统上的环境变量

        3
  •  54
  •   David Foerster Umberto Salsi    9 年前

    你可以设置你的 _JAVA_OPTIONS 环境变量。例如,在bash中,这将实现以下技巧:

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

    我把它放进了我的bash登录脚本中,它似乎做到了这一点。

        4
  •  34
  •   David Foerster Umberto Salsi    9 年前

    使用

    $ java -XshowSettings
    Property settings:
        java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
        java.io.tmpdir = /tmp
    
        5
  •  26
  •   David Foerster Umberto Salsi    9 年前

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

    -Djava.io.tmpdir
    

    前任。:

    java -Djava.io.tmpdir=/mytempdir
    
        6
  •  15
  •   Stephen C    15 年前

    要弄清楚这里发生了什么:

    • 设置临时目录位置的推荐方法是设置称为“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),但不能在其他平台上工作。如果您关心可移植性,那么应该显式地设置系统属性。

        7
  •  -2
  •   wscourge Kiran Balakrishnan    6 年前

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

    java -XshowSettings
    

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