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

问题描述 投票:0回答:8
环境变量来控制诸如GCC撰写的临时文件之类的内容,但是我似乎找不到Java的

createTeTemPfile

Api.
存在这样的环境变量吗?

根据

java configuration environment-variables temporary-files
8个回答
155
投票
javadocs

  
默认临时文件目录由系统属性Java.io.tmpdir指定。在UNIX系统上,此属性的默认值通常为“/tmp”或“/var/tmp”;在Microsoft Windows系统上,通常是“ C:EMP”。当调用Java虚拟机时,可以给出此系统属性的不同值,但是对此属性的程序化更改不能保证对此方法使用的临时目录产生任何影响。

要指定
java.io.tmpdir

系统属性,您可以使用以下方式调用JVM:

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

默认值此值应来自Windows Systems上的

TMP
环境变量

hmmm-由于这是由JVM处理的,因此我稍微深入研究了OpenJDK VM源代码,以为OpenJDK所做的可能模仿Java 6和Prient所做的事情。  除了在Windows上,还有其他方法可以放心。

 -windows

,OpenJDK的

136
投票
函数将Win32 API调用to

GetTempPath()

;这就是Windows上的方式,Java反映了

TMP环境变量的值。 linux

solaris
,相同的函数返回静态值
get_temp_directory()
我不知道实际的JDK6是否遵循这些确切的惯例,但是通过每个列出的平台上的行为,似乎它们都在。

您可以设置/tmp/环境变量。例如,在Bash中,这将有能力解决: _JAVA_OPTIONS

我把它放在我的bash登录脚本中,它似乎可以解决这个技巧。
    

使用

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


80
投票

它不是环境变量,但仍然可以使您控制临时工:



$ java -XshowSettings Property settings: java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre java.io.tmpdir = /tmp

ex。:

-Djava.io.tmpdir


45
投票

清楚这里发生了什么:


32
投票
java -Djava.io.tmpdir=/mytempdir

给予

-Djava.io.tmpdir=/mytempdir
命令。
也可以通过调用

java

... modulo沙盒安全问题来从程序中更改该属性。 thowever
仅在JVM初始化期间读取一次“ java.io.tmpdir”系统属性,其值在
System.setProperty("java.io.tmpdir", "/mytempdir)

25
投票
对临时目录没有影响。

    如果您没有通过
  • private

    选项明确设置“ java.io.tmpdir”系统属性,则JVM使用

    Platformcmparity默认值。  对于Windows,默认值是通过呼叫Win32 API方法获得的。  对于Linux / Solaris,默认值显然是硬连线。  对于其他JVM,可能是其他的。
    
    从经验上讲,“ TMP”环境变量在Windows(带有当前JVM)上起作用,但在其他平台上不起作用。  如果您关心便携性,则应明确设置系统属性。
        

    在Unix终端上的命令下方使用:

    -D

    这将显示所有Java属性和系统设置。 在此外观中,java -XshowSettings 值。

    
    NoWAdays来源:Https://github.com/openjdk/jdk/jdk/search?l = java&p = 4&q =java.io.tmpdir,只使用了属性。
    

    为Linux:
  • java.io.tmpdir

    Https://github.com/openjdk/jdk/blob/eab4c0c49934bd6f37a0b6174ca10e5c8708d13b/src/src/src/hotspot/hotspot/os/linux/linux/linux/os_linux.linux.cpp#l1317.
    

    Https://github.com/openjdk/jdk/blob/739769c8fc4b496f08a9222225a12d07414537b6c0/src/src/java.base/java.base/unix/unix/unix/conf/net.net.properties-
  • Windows:

// This must be hard coded because it's the system's temporary // directory not the java application's temp directory, ala java.io.tmpdir. const char* os::get_temp_directory() { return "/tmp"; }


14
投票
https://github.com/openjdk/jdk/blob/eab4c0c49934bd6f37a0b6174ca10e5c8708d13b/src/src/hotspot/hotspot/os/windows/windows/os_windows/os_windows.cpp#l13666 6.

在这里为苹果:

https://github.com/openjdk/jdk/blob/739769c8fc4b496f08a92225a12d07414537b6c0/src/jdk.attach/macosx/native/libattach/VirtualMachineImpl.c#L322

    

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


3
投票

如果您在JDK的源代码中查看,则可以看到,对于Unix系统,该属性是从路径上读取的时间。 for

windows

from

Win32
返回
if (GetTempPath(MAX_PATH, path_buf) > 0) { return path_buf; } else {
    名。
  • 对于Posix系统,您可能期望标准
  • GetTempPathW
  • 工作,但事实并非如此。您可以确认不通过运行tmpdir
  • 使用
TMPDIR


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.