Java:从uid获取用户名

问题描述 投票:0回答:1

我正在阅读一个

tar
存档,其中包含数字所有者和组 ID。

我想将文件所有权设置为存档中给出的所有权。 假设当然目标机器上的名称到 ID 的映射与存档源上的相同,我该怎么做?

  • 在 Java 中执行此操作的唯一方法是
    Files.setOwner()
  • Files.setOwner()
    需要
    UserPrincipal
    参数。
  • UserPrincipal
    接口有一个
    getName()
    方法。
  • tar
    存档仅包含数字 ID。
  • 如果我有名字,我就可以创建一个
    UserPrincipal
    对象。

但似乎没有“干净”的方法来获取与特定数字 uid 关联的用户名(如果存在)。我所说的“干净”是指 JVM 方法,而不是读取和解析 /etc/passwd

java operating-system
1个回答
0
投票

Java 不提供任何直接 API 来从数字 UID 检索操作系统级别用户名。正如您正确指出的那样,UserPrincipal 对象使用用户名,而不是用户的数字标识符。

最彻底的解决方案是合并 JNI(Java 本机接口)或 JNA(Java 本机访问)解决方案。 JNI和JNA可以调用C/C++函数。您可以使用 JNI 或 JNA 调用系统函数

getpwuid
从 UID 中检索用户名。

© www.soinside.com 2019 - 2024. All rights reserved.