System.getProperty("java.io.tmpdir")没有返回正确位置

0 人关注

我读了 这个帖子 ,并确定将我的系统和用户变量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?TIA

我还试着在cmd窗口中进行 set -Djava.io.tmpdir=C:\Temp 的操作,结果还是一样。

java
tomcat
reactFullStackDeveloper
reactFullStackDeveloper
发布于 2021-02-05
2 个回答
stdunbar
stdunbar
发布于 2021-02-05
已采纳
0 人赞同

在Tomcat安装目录下的 bin\catalina.bat 中,有以下几行。

if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
set "CATALINA_TMPDIR=%CATALINA_BASE%\temp"
:gotTmpdir

你可以设置环境变量CATALINA_TMPDIR或者修改这个文件。

谢谢你!我在命令行中设置了环境变量,并重新启动了我的电脑,现在可以工作了。
如果你在bin目录下创建一个setenv.bat文件,并在那里设置CATALINA_TMPDIR,Tomcat每次启动时都会接收到。(前提是你从命令行启动Tomcat)
Stephen C
Stephen C
发布于 2021-02-05
0 人赞同

"我还试着从cmd窗口做了set -Djava.io.tmpdir=C:\Temp,结果还是一样。"

Tomcat本身正在将 System 属性中的 java.io.tmpdir 属性设置为 CATALINA_TMPDIR 环境变量 的值。 这发生在Tomcat启动时,它覆盖了你的 -D 设置。

因此,简单的解决方案是( 如本答案 所述), 要么 在启动Tomcat的环境中设置 CATALINA_TMPDIR 要么 修改 catalina.bat 文件(或Linux中的 catalina.sh 文件)。 前者比较好。 如果可以的话,保持Tomcat安装树的 "原始状态 "是个好主意。

另一方面,如果你想让你的web应用使用(比如)"C:\Temp "来处理 某些 事情,而让web容器的其他部分使用 java.io.tmpdir 来处理其他部分,你的web应用代码可以使用(比如)。

Files.createTempFile(Path dir, String prefix, String suffix,
                     FileAttribute<?>... attrs) 
Files.createTempFile(String prefix, String suffix,