System.getenv(имя_компьютера) усечение возвращаемого значения

В чем разница между System.getenv("computername") и System.getenv("hostname") в Java?

Есть ли ограничение на количество символов в имени компьютера при его извлечении методом getenv()?

У меня длинное имя хоста, и System.getenv("computername"), кажется, усекает его до 15 символов. Используемая ОС — Windows.


person user811433    schedule 14.11.2012    source источник
comment
Это специфично для Java? Что происходит, когда вы просматриваете переменную среды в cmd?   -  person Mark Peters    schedule 14.11.2012
comment
это характерно для java, когда значение извлекается с использованием кода java. это нормально из командной строки cmd.   -  person user811433    schedule 14.11.2012
comment
Вы предлагаете, чтобы getenv("hostname") не обрезал возвращаемое значение? Вы возвращаете более 15 символов с этой переменной среды?   -  person Duncan Jones    schedule 14.11.2012
comment
Нет. Написал несколько строк кода и обнаружил, что имя компьютера соответствует среде Windows, а имя хоста соответствует среде Unix. Все еще не уверен насчет ограничения в 15 символов.   -  person user811433    schedule 14.11.2012


Ответы (3)


Усечение в Windows связано с тем, что NetBIOS имеет ограничение длины имени компьютера в 15 символов.

http://support.microsoft.com/kb/909264

person G. Stevens    schedule 04.03.2014

Это работает:

try {
return InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {
return "Error: UnknownHostException";
}

Надеюсь, я помогу вам.

Сэм'

person SamaelStern    schedule 03.06.2014

Я написал простое тестовое приложение:

public class Test {
  public static void main(String[] args) {
    System.out.println(System.getenv("computername"));
  }
}

а затем выполнил:

set COMPUTERNAME=abcdefghijklmnopqrstuvwxyz
java Test

который напечатал:

abcdefghijklmnopqrstuvwxyz

Отлично работает как в Java 5, так и в 7 в Windows. Никаких признаков усечения.

person Duncan Jones    schedule 14.11.2012
comment
Основываясь на вашем коде здесь, я попытался установить имя компьютера и выполнить программу. Это работает нормально. Я получаю ожидаемое имя компьютера. Но когда я пытаюсь получить имя компьютера моей машины в сети, я получаю усеченное значение. - person user811433; 14.11.2012
comment
А echo %COMPUTERNAME% в командной строке показывает неусеченное значение? - person Duncan Jones; 14.11.2012
comment
Нет, он показывает правильное значение. Выполнение программы из командной строки cmd после выполнения SET также показывает правильное значение. Только когда фактическое имя компьютера длинное (не через SET), я вижу усеченное значение, когда запускаю программу из eclipse. - person user811433; 14.11.2012