System.getProperty(“java.io.tmpdir”)未返回正确的位置

System.getProperty(“java.io.tmpdir”)未返回正确的位置,java,tomcat,Java,Tomcat,我已经阅读并确保将TEMP和TMP的系统变量和用户变量分别设置为C:\TEMP和C:\TMP。我已经重新启动了我的机器两次,但是当我的应用程序调用System.getProperty(“java.io.tmpdir”)时,它一直指向C:\Program Files\Apache Software Foundation\Tomcat 8.5\temp。为什么要这样做,我如何才能将它指向C:\Temp或C:\tmp?短暂性脑缺血发作 编辑: 我也尝试过从cmd窗口执行set-Djava.io.tmp

我已经阅读并确保将TEMP和TMP的系统变量和用户变量分别设置为C:\TEMP和C:\TMP。我已经重新启动了我的机器两次,但是当我的应用程序调用
System.getProperty(“java.io.tmpdir”)
时,它一直指向
C:\Program Files\Apache Software Foundation\Tomcat 8.5\temp
。为什么要这样做,我如何才能将它指向C:\Temp或C:\tmp?短暂性脑缺血发作

编辑:

我也尝试过从cmd窗口执行
set-Djava.io.tmpdir=C:\Temp
,但仍然得到相同的结果。
bin\catalina.bat
中Tomcat安装目录中的以下行:

if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
set "CATALINA_TMPDIR=%CATALINA_BASE%\temp"
:gotTmpdir
您可以设置环境变量CATALINA_TMPDIR或修改此文件

“我也尝试过从cmd窗口执行set-Djava.io.tmpdir=C:\Temp,但仍然得到相同的结果。”

Tomcat本身正在将
System
properties中的
java.io.tmpdir
属性设置为
CATALINA\u tmpdir
环境变量设置为的任何值。这发生在Tomcat启动期间,它将覆盖您的
-D
设置

因此,简单的解决方案是(如中所述)在启动Tomcat的环境中设置
CATALINA_TMPDIR
,或者修改
CATALINA.bat
文件(或者Linux上的
CATALINA.sh
文件)。前者更好。如果可以的话,最好保持Tomcat安装树“原始”

另一方面,如果您希望您的web应用程序对某些事情使用(比如)“C:\Temp”,而web容器的其余部分仍然使用
java.io.tmpdir
,那么您的web应用程序代码可以使用(例如)

Files.createTempFile(路径目录、字符串前缀、字符串后缀、,
文件属性…属性)
而不是

Files.createTempFile(String prefix, String suffix, 
                     FileAttribute<?>... attrs)
Files.createTempFile(字符串前缀、字符串后缀、,
文件属性…属性)
i、 e.告诉它在创建临时文件时要使用哪个临时目录。(如果临时文件是用第三方代码创建的,这可能会很尴尬。)



最后要注意的一点是,如果您在启用强制的SELinux系统上运行Tomcat,Tomcat服务(默认情况下)在读取和写入文件的位置受到限制。如果要使用其他“临时”位置,可能需要调整SELinux策略。

谢谢!我在命令行中设置了环境变量并重新启动了我的计算机,现在它可以工作了。如果在bin目录中创建setenv.bat文件并设置CATALINA_TMPDIR,Tomcat将在每次启动时获取该文件。(前提是从命令行启动tomcat)
Files.createTempFile(String prefix, String suffix, 
                     FileAttribute<?>... attrs)