Как получить имя пользователя 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

Два способа

  • System.getProperty("user.name");

  • System.getenv("USERNAME");

Оба хороши для любой ОС

Ответ 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());
    }