【发布时间】:2017-06-21 13:38:18
【问题描述】:
我正在使用 Java Spring Boot 并部署到 Tomcat 8.1 webapp。
当我用相对路径创建一个 new File() 时,它指的是系统的绝对根目录。
例如,
File x = new File("./temp.txt");
System.out.println("X Path: " + x.getAbsolutePath());
输出是
/./temp.txt
这是为什么?我收到了 Java.nio.File.AccessDeniedException,因为 Tomcat 没有写入根目录的权限。
代码是创建缓存文件的第三方库,所以我不能只更改为绝对路径。
是什么导致 Tomcat 使用 / 作为我的工作目录?
【问题讨论】:
-
我使用的第三方库专门使用了“./pemfile_cached”。上面的代码是我确认我得到了相同的结果。这是第三方库,第 197 行:github.com/MachinePublishers/jBrowserDriver/blob/master/src/com/…
-
您可能需要查看this link。 TLDR:你可以使用
System.setProperty("user.dir", <path>)来设置当前目录,而不是Tomcat的 -
如果可行,我会将其保存为最后的手段。我宁愿不必为这里的每个调用显式设置我当前的工作目录,但如果我必须这样做,我会的。我怀疑 tomcat 配置(或缺少配置)是问题所在,但我不确定从哪里开始寻找。
-
原因写在the post I linked。可以找到一个干净的解决方案here
-
我不明白。您链接的帖子没有提及绝对路径。当我使用 System.getProperty("user.dir") 它返回一个简单的“/”。它不应该返回(如您的链接所示) $CATALINA_HOME/webapps/YOUR_WEB_APP/ 吗?
标签: java file tomcat servlets relative-path