【问题标题】:Java System.getProperty("user.home") how return home for other user (pi)?Java System.getProperty("user.home") 如何为其他用户(pi)返回主页?
【发布时间】:2019-07-20 13:06:53
【问题描述】:

我在 RPI 上以 .jar 文件的形式执行一个 java 程序,在其中接收用户“pi”的正确主路径至关重要。

System.getProperty("user.home")

返回我/root,什么是错误的目录并弄乱了我的文件结构,因为在那个目录中。我正在创建更多文件夹等。 我以用户 pi 的身份启动程序。

如何在不被黑客入侵的情况下为某个用户(在我的情况下是 pi,“/home/pi/”)接收正确的主文件夹?

PS:该用户当然可以作为参数输入。

Raspbian stretch
openjdk 11.0.3 2019-04-16
OpenJDK Runtime Environment (build 11.0.3+1-Raspbian-1)
OpenJDK Server VM (build 11.0.3+1-Raspbian-1, mixed mode)

【问题讨论】:

    标签: java linux raspbian home-directory


    【解决方案1】:

    在 Java 中没有干净(便携)的方式来查找有关其他用户的信息。

    如果您对操作系统特定的解决方案(基于 Linux 的系统)没问题,您可以使用Process 和朋友运行getent passwd 外部命令,然后读取并解析其输出。

    getent passwd 输出由每个匹配用户一行组成。每行由多个冒号分隔的字段组成,因此您可以使用String::split 解析这些行。在我的系统上,用户的主目录是条目中的第 6 个字段。

    有关更多信息,请阅读man getentProcessProcessBuilder 的javadocs。

    【讨论】:

    • 嗯,不太够用,可惜了。那我宁愿用 try{ 作为 /home/$user 路径。
    • 那行不通。用户的主目录不一定在“/home”中。相信我,你不能使用启发式。您需要查阅getent 正在查看的信息来源……而且可能是不同的地方;例如/etc/passwd、LDAP 等
    • 听起来很合理。
    猜你喜欢
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2019-11-28
    • 1970-01-01
    相关资源
    最近更新 更多