在Java中,如何设置文件所有者为root?

In Java, how to set file owner to root?

我使用的是 MacOS,这是我的示例代码:

@Component
public class HealthFileSystemServiceImpl {
    public HealthCommonConf saveYml(HealthCommonConf healthCommonConf) throws IOException {
        Files.setOwner(Paths.get(myFilePath), FileSystems.getDefault().getUserPrincipalLookupService().lookupPrincipalByName("root"));
    }
}

然后我收到此异常消息:

java.nio.file.FileSystemException: /tmp/jmuser/healthService/monitor/Test-Jmsight-id_Test-Health-Name.yml: Operation not permitted

    at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:100)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
    at java.base/sun.nio.fs.UnixFileAttributeViews$Posix.setOwners(UnixFileAttributeViews.java:268)
    at java.base/sun.nio.fs.UnixFileAttributeViews$Posix.setOwner(UnixFileAttributeViews.java:290)
    at java.base/sun.nio.fs.FileOwnerAttributeViewImpl.setOwner(FileOwnerAttributeViewImpl.java:100)
    at java.base/java.nio.file.Files.setOwner(Files.java:2163)

我该如何解决这个问题?


编辑

环境:

  1. 我正在使用 IntelliJ,我正在尝试 运行 我的 JUnit 测试文件。
  2. healthTcpConfRepository.findById(1L) returns true.
  3. myFilePath 存在。

@Autowired
private HealthFileSystemServiceImpl healthFileSystemService;

@Test
public void saveConf() throws IOException {
    healthFileSystemService.saveYml(healthTcpConfRepository.findById(1L).orElse(null));
}

感谢@Azeem。

当我运行以root身份使用终端时,它通过了。

root# mvn clean test -Dtest={myPackage}.HealthFileSystemServiceImplTest#saveConf

请确保您的 IDE 即 IntelliJ IDEA​​ 在您执行应用程序时具有 运行 root 权限。

如果您是从命令行/终端 运行 它那么它也应该用 root 执行。