【发布时间】:2013-11-28 04:40:02
【问题描述】:
所以我想做的是让我的 Java 找到登录 windows 的用户名,所以当我说这样的方法时,它会返回用户名,就像我在名为 Noah 的用户中使用它一样,java 会返回“Noah”,如果我是用户 Amanda,Java 会返回“Amanda”。我该怎么做?
【问题讨论】:
所以我想做的是让我的 Java 找到登录 windows 的用户名,所以当我说这样的方法时,它会返回用户名,就像我在名为 Noah 的用户中使用它一样,java 会返回“Noah”,如果我是用户 Amanda,Java 会返回“Amanda”。我该怎么做?
【问题讨论】:
查找系统属性“user.name”。
String username = System.getProperty("user.name");
演示:Main.java
public class Main {
public static void main(String[] args) {
System.out.println(System.getProperty("user.name"));
}
}
输出:
c:\dev\src\misc>javac Main.java
c:\dev\src\misc>java Main
rgettman
c:\dev\src\misc>
【讨论】:
试试:
String userName = System.getProperty("user.name");
或
String userName = new com.sun.security.auth.module.NTSystem().getName()
【讨论】:
new NTSystem().getName() 返回 SYSTEM 作为 Windows 服务运行,在任何之前以及在使用 Windows 用户登录之后使用 jre1.8.0_201。
两种方式
System.getProperty("user.name");
System.getenv("USERNAME");
两者都适用于任何操作系统
【讨论】:
USERNAME 可能在不同版本的 Windows 上可用,但在 macOS(选中 Catalina)或 Linux/GNU(选中 Linux Mint)上默认不可用。您需要在这些系统上检查 USER。
当应用在 Windows 服务上运行时,NTSystem.getName() 也会返回 SYSTEM。当应用程序在 Windows 服务上运行时,无法使用 NTSystem 获取用户名
【讨论】: