我有问题。我不知道为什么,但是Java尝试写入docker容器 / 中的根目录,即使我通过了 -Duser.dir =“ / opt / service” 但
new File("test.txt").createNewFile()
仍然返回 权限被拒绝 。另外,将docker的workdir设置为其他文件夹而不是root。
如果我在docker中运行以下代码
logger.info(new File(".").getAbsolutePath())
然后我得到“ /。” ,这意味着Java尝试写入根目录 如果我跑
System.getProperty("user.dir") => "/"
错误日志
Caused by: java.io.IOException: Permission denied
at java.base/java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.base/java.io.File.createNewFile(File.java:1024)
答案 0 :(得分:0)
在命令行上用user.dir
定义-D
不会更改Java进程的目录。
但是,在程序刚启动时使用代码执行此操作是可行的,但是您还需要使用getAbsoluteFile()
。
System.setProperty("user.dir", "/opt/service");
System.out.println(new File("test.txt").getPath());
System.out.println(new File("test.txt").getAbsoluteFile().getPath());
这应该输出
test.txt
/opt/service/test.txt