首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.getProperty("java.io.tmpdir")没有返回正确的位置

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

Stack Overflow用户
提问于 2021-02-04 22:45:57
回答 2查看 1.3K关注 0票数 0

我读过this post,并确保分别将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,并且仍然得到相同的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-04 22:52:01

在bin\catalina.bat中,Tomcat安装目录中的行如下:

代码语言:javascript
复制
if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
set "CATALINA_TMPDIR=%CATALINA_BASE%\temp"
:gotTmpdir

您可以设置环境变量CATALINA_TMPDIR或修改此文件。

票数 7
EN

Stack Overflow用户

发布于 2021-02-04 23:57:04

“我也尝试过从cmd窗口设置-Djava.io.tmpdir=C:\Temp,并且仍然得到相同的结果。

Tomcat本身正在将System属性中的System属性设置为CATALINA_TMPDIR环境变量设置的任何内容。这在Tomcat启动过程中发生,它正在覆盖您的-D设置。

因此,简单的解决方案(如this answer中所提到的)要么在启动Tomcat的环境中设置CATALINA_TMPDIR,要么修改catalina.bat文件(或者在Linux上修改catalina.sh文件)。前者更可取。如果可以的话,保持Tomcat安装树的“原始”是个好主意。

另一方面,如果您希望您的web应用程序在某些事情上使用(例如) "C:\Temp“,而让web容器的其余部分使用java.io.tmpdir,则您的webapp代码可以使用(例如)

代码语言:javascript
复制
Files.createTempFile(Path dir, String prefix, String suffix,
                     FileAttribute<?>... attrs) 

而不是

代码语言:javascript
复制
Files.createTempFile(String prefix, String suffix, 
                     FileAttribute<?>... attrs)

也就是说,告诉它在创建临时文件时要使用哪个临时目录。(如果临时文件是用第三方代码创建的,这可能会很尴尬。)

最后要注意的是,如果您在启用了强制执行的SELinux系统上运行Tomcat,那么Tomcat服务(默认情况下)在它可以读取和写入文件的地方受到限制。如果要使用替代的“临时”位置,则可能需要调整SELinux策略。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66054983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档