Как получить имя пользователя Windows на Java?
Итак, что я пытаюсь сделать, это позволить моей Java найти имя пользователя, с которым подключены окна, поэтому, когда я скажу такой метод, он будет возвращать имя пользователя, например, я использую его в User под именем Noah, java вернет "Noah", и если бы я был на пользователе Аманда, Java вернет "Аманду". Как мне это сделать?
Ответы
Ответ 1
Посмотрите на системное свойство "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>
Ответ 2
Try:
String userName = System.getProperty("user.name");
или
String userName = new com.sun.security.auth.module.NTSystem().getName()
Ответ 3
Два способа
Оба хороши для любой ОС
Ответ 4
NTSystem.getName() также возвращает SYSTEM, когда приложение запускается в службе Windows. Нет способа получить имя пользователя с помощью NTSystem, когда приложение работает в службе Windows
Ответ 5
Ниже приведено решение ТОЛЬКО для WINDOWS
В случаях, когда приложение (например, Tomcat) запускается как служба Windows, System.getProperty("user.name") или System.getenv(). Get ("USERNAME") возвращают пользователя, который запустил службу, а не пользователя. текущий вошедший в систему имя пользователя.
Также в Java 9 классы NTSystem и т.д. Не будут доступны
Итак, обходной путь для Windows: вы можете использовать wmic, поэтому вам нужно выполнить следующую команду
wmic ComputerSystem get UserName
Если доступно, будет возвращен вывод формы:
UserName
{domain}\{logged-in-user-name}
Примечание. Для окон необходимо использовать cmd/c в качестве префикса, поэтому ниже приведена примерная программа:
Process exec = Runtime.getRuntime().exec("cmd /c wmic ComputerSystem get UserName".split(" "));
System.out.println(exec.waitFor());
try (BufferedReader bw = new BufferedReader(new InputStreamReader(exec.getInputStream()))) {
System.out.println(bw.readLine() + "\n" + bw.readLine()+ "\n" + bw.readLine());
}