Java lib environment variable

Environment Variables

Many operating systems use environment variables to pass configuration information to applications. Like properties in the Java platform, environment variables are key/value pairs, where both the key and the value are strings. The conventions for setting and using environment variables vary between operating systems, and also between command line interpreters. To learn how to pass environment variables to applications on your system, refer to your system documentation.

Querying Environment Variables

On the Java platform, an application uses System.getenv to retrieve environment variable values. Without an argument, getenv returns a read-only instance of java.util.Map , where the map keys are the environment variable names, and the map values are the environment variable values. This is demonstrated in the EnvMap example:

import java.util.Map; public class EnvMap < public static void main (String[] args) < Mapenv = System.getenv(); for (String envName : env.keySet()) < System.out.format("%s=%s%n", envName, env.get(envName)); >> >

With a String argument, getenv returns the value of the specified variable. If the variable is not defined, getenv returns null . The Env example uses getenv this way to query specific environment variables, specified on the command line:

Passing Environment Variables to New Processes

When a Java application uses a ProcessBuilder object to create a new process, the default set of environment variables passed to the new process is the same set provided to the application’s virtual machine process. The application can change this set using ProcessBuilder.environment .

Читайте также:  Javascript tutorial на русском

Platform Dependency Issues

There are many subtle differences between the way environment variables are implemented on different systems. For example, Windows ignores case in environment variable names, while UNIX does not. The way environment variables are used also varies. For example, Windows provides the user name in an environment variable called USERNAME , while UNIX implementations might provide the user name in USER , LOGNAME , or both.

To maximize portability, never refer to an environment variable when the same value is available in a system property. For example, if the operating system provides a user name, it will always be available in the system property user.name .

Источник

Управление переменными среды в Java

В этом руководстве мы будем управлять переменными среды с помощью Java с примерами получения имен и ключей переменных среды, а также их настройки и запуска процессов.

Вступление

Переменные называются ячейками памяти. Их значения сохраняются в памяти, которую мы обычно не можем запомнить, поскольку они не подходят для человека и меняются местами. Хотя, если мы назовем ячейку памяти, например a , ее будет намного легче запомнить.

Переменные среды во многом похожи на обычные переменные программирования, за исключением того, что они заданы где-то вне программы. Это может быть использовано операционной системой, JVM, микросервисом, который использует наша программа, и т. Д.

Точнее, это пары ключ/значение , где ключ-это то, что можно рассматривать как имя переменной среды, а значение-это, ну, значение. Их значения всегда являются строками.

Когда люди ссылаются на переменные среды, они обычно имеют в виду те, которые установлены операционной системой. Вероятно, в прошлом вам приходилось иметь дело с PATH и JAVA_HOME – это переменные среды.

Переменные среды различаются в разных операционных системах, и иногда бывает сложно создавать переносимые программы, которые полагаются на них, но ничто не делает их по своей сути трудными для работы.

Переменные окружения операционной системы имеют свой аналог в мире JVM – Свойства . Они выходят за рамки этой статьи, но стоит упомянуть, что они являются довольно похожей концепцией в меньшем масштабе.

Запрос переменных среды

Ваша операционная система хранит свои переменные среды в виде пар ключ/значение. Вы можете использовать System.getenv() для получения этих значений. Если вы используете его без аргумента, вы получите Map объект в качестве возвращаемого значения:

Map env = System.getenv(); for(String envName : env.keySet())

Вот усеченное представление результатов:

PROCESSOR_ARCHITECTURE : AMD64 MIC_LD_LIBRARY_PATH : C:\Program Files (x86)\Common Files\Intel\Shared Libraries\compiler\lib\mic PSModulePath : C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\ SystemDrive : C: AWE_DIR : D:\Awesomium\1.6.6\ FPS_BROWSER_USER_PROFILE_STRING : Default PATHEXT : .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC DriverData : C:\Windows\System32\Drivers\DriverData HerokuPath : E:\Heroku ProgramData : C:\ProgramData ProgramW6432 : C:\Program Files

Вы также можете передать ему Строку , соответствующую имени переменной (ключу), и он вернет значение соответствующей переменной в виде Строки :

System.out.println(System.getenv("NUMBER_OF_PROCESSORS"));

Конструктор процессов и окружающая среда

В Java есть класс Process для работы с процессами операционной системы. Чтобы упростить создание процесса, существует класс ProcessBuilder , и вы можете просто “добавить” команды в его экземпляр для запуска.

Каждый процесс может иметь свою собственную среду. Ваша программа будет иметь свою среду, заданную операционной системой, но программы, которые вы запускаете как процессы, могут иметь измененную “ручную” среду.

Чтобы отредактировать среду, вам необходимо извлечь ее ссылку из вашего объекта ProcessBuilder с помощью environment() getter. Как и при чтении переменных среды из System , вы получите Карту , а затем сможете изменить ее с помощью обычных Map операций.

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

После создания среды мы создадим команду. Это зависит от операционной системы. Здесь у нас есть элементарная проверка, которая адекватно изменяет команду:

// Setting up the environment. ProcessBuilder processBuilder = new ProcessBuilder(); Map env = processBuilder.environment(); env.put("PING_WEBSITE", "stackabuse.com"); if (System.getProperty("os.name").startsWith("Windows")) < processBuilder.command("cmd.exe", "/c", "ping -n 3 %PING_WEBSITE%") >else < processBuilder.command("/bin/bash", "-c", "ping $PING_WEBSITE$"); >try < // Starting the process. Process process = processBuilder.start(); // Reading the output of the process try (BufferedReader reader = new BufferedReader( new InputStreamReader(process.getInputStream()))) < String line; while ((line = reader.readLine()) != null) < System.out.println(line); >> // Catch the exit code of our process int ret = process.waitFor(); System.out.printf("Program exited with code: %d", ret); > catch (IOException | InterruptedException e) < // Handle exception. e.printStackTrace(); >
Pinging stackabuse.com [172.67.218.223] with 32 bytes of data: Reply from 172.67.218.223: bytes=32 time=12ms TTL=57 Reply from 172.67.218.223: bytes=32 time=12ms TTL=57 Reply from 172.67.218.223: bytes=32 time=15ms TTL=57 Ping statistics for 172.67.218.223: Packets: Sent = 3, Received = 3, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 12ms, Maximum = 15ms, Average = 13ms Program exited with code: 0 Process finished with exit code 0

Мы создали новую переменную среды с именем PING_WEBSITE с фиксированным значением. Вы можете изменить эту программу, чтобы задать значение PING_WEBSITE для ввода пользователем, аргумента командной строки или считывания значения из файла.

Если вы хотите прочитать о том , как анализировать и сопоставлять аргументы командной строки в Java или как получить ввод Uset в Java, мы вам поможем!

Вывод

Мы представили концепцию переменных среды, объяснили, для чего они используются, и аналогичные концепции, а также их системно-зависимую природу.

Затем мы напечатали переменные среды с помощью метода Java System.getEnv () , а также создали процессы с помощью ProcessBuilder и выполнили команды, которые зависят от переменных среды.

Читайте ещё по теме:

Источник

Оцените статью