欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用java批量寫(xiě)入環(huán)境變量的實(shí)現(xiàn)

 更新時(shí)間:2024年03月08日 08:31:25   作者:人間花木  
本文主要介紹了使用java批量寫(xiě)入環(huán)境變量,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

環(huán)境需求

jdk版本:1.8

jna依賴(lài):

        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>5.10.0</version>
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna-platform</artifactId>
            <version>5.10.0</version>
        </dependency>

獲取環(huán)境變量

    /**
     * 獲取指定環(huán)境變量的內(nèi)容,如果該環(huán)境變量不存在,則返回null 
     * @param variableName 環(huán)境變量名稱(chēng)
     * @return String
     * @version 2.2
     * @author suhuamo
     */
    public static String getEnvironmentVariables(String variableName) {
        // 注冊(cè)表中環(huán)境變量所在位置
        String registryPath = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";
        try {
            return Advapi32Util.registryGetStringValue(WinReg.HKEY_LOCAL_MACHINE, registryPath, variableName);
            // 如果找不到這個(gè)環(huán)境變量,則會(huì)拋出異常
        } catch (Exception e) {
            return null;
        }
    }

重要參數(shù)介紹:

registryPath:注冊(cè)表中環(huán)境變量所在位置,即【目前打開(kāi)的這個(gè)文件就是環(huán)境變量的注冊(cè)表文件】

image.png

WinReg.HKEY_LOCAL_MACHINE:環(huán)境變量在注冊(cè)表中的所屬組,即

image.png

variableName:需要查找的環(huán)境變量的名稱(chēng),即

image.png

這一列的任意一個(gè)。

設(shè)置環(huán)境變量

    /**
     * 批量寫(xiě)入環(huán)境變量 
     * @param systemEnvironmentVariables 需要寫(xiě)入的環(huán)境變量,<k:v> 對(duì)應(yīng) <環(huán)境變量名稱(chēng):環(huán)境變量的值>
     * @return void
     * @version 2.2
     * @author suhuamo
     */
    public static void setSystemEnvironmentVariables(Map<String, String> systemEnvironmentVariables){
        // 注冊(cè)表中環(huán)境變量所在位置
        String registryPath = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";
        // 遍歷每一組需要寫(xiě)入的環(huán)境變量
        for (Map.Entry<String, String> entry : systemEnvironmentVariables.entrySet()) {
            // 將該組環(huán)境變量的內(nèi)容寫(xiě)入注冊(cè)表文件中
            Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, registryPath, entry.getKey(), entry.getValue());
        }
    }

整合可直接使用的工具類(lèi)

package org.yscz.aiks;

import com.sun.jna.platform.win32.Advapi32Util;
import com.sun.jna.platform.win32.WinReg;

import java.util.Map;

/**
 * @author suhuamo
 * @slogan 今天的早餐是:早苗的面包、秋子的果醬和觀鈴的果汁~
 * @date 2024-01-16
 * @description
 * 操作操作系統(tǒng)的工具類(lèi)
 */
public class OSUtil {
    /**
     * 注冊(cè)表中環(huán)境變量所在位置
     * @version 2.2
     * @author suhuamo
     * @with {@link }
     */
    public static final String registryPath = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";
    /**
     * 批量寫(xiě)入環(huán)境變量
     * @param systemEnvironmentVariables 需要寫(xiě)入的環(huán)境變量,<k:v> 對(duì)應(yīng) <環(huán)境變量名稱(chēng):環(huán)境變量的值>
     * @return void
     * @version 2.2
     * @author suhuamo
     */
    public static void setSystemEnvironmentVariables(Map<String, String> systemEnvironmentVariables) {
        // 遍歷每一組需要寫(xiě)入的環(huán)境變量
        for (Map.Entry<String, String> entry : systemEnvironmentVariables.entrySet()) {
            // 將該組環(huán)境變量的內(nèi)容寫(xiě)入注冊(cè)表文件中
            Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, registryPath, entry.getKey(), entry.getValue());
        }
    }

    /**
     * 獲取指定環(huán)境變量的內(nèi)容,如果該環(huán)境變量不存在,則返回null
     * @param variableName 環(huán)境變量名稱(chēng)
     * @return String
     * @version 2.2
     * @author suhuamo
     */
    public static String getEnvironmentVariables(String variableName) {
        try {
            return Advapi32Util.registryGetStringValue(WinReg.HKEY_LOCAL_MACHINE, registryPath, variableName);
            // 如果找不到這個(gè)環(huán)境變量,則會(huì)拋出異常
        } catch (Exception e) {
            return null;
        }
    }
}

提示:

寫(xiě)入注冊(cè)表的時(shí)候最消耗時(shí)間的是讀取到注冊(cè)表文件的句柄,當(dāng)讀取到了之后,寫(xiě)入注冊(cè)表的耗時(shí)不到1毫秒,即如果是寫(xiě)入環(huán)境變量,寫(xiě)入1個(gè)環(huán)境變量的時(shí)間和寫(xiě)入100個(gè)環(huán)境變量的時(shí)間消耗時(shí)間幾乎相同。

寫(xiě)入1個(gè)環(huán)境變量

package org.yscz.aiks;

import java.util.HashMap;
import java.util.Map;

/**
 * @author suhuamo
 * @slogan 巨人給你鞠躬,是為了讓陽(yáng)光也照射到你。
 * @date 2024-01-16
 * @description
 */
public class Main {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        Map<String, String> environmentVariables = new HashMap<>();
        environmentVariables.put("VAR1", "value1");
        OSUtil.setSystemEnvironmentVariables(environmentVariables);
        long end = System.currentTimeMillis();
        System.out.println("當(dāng)前消耗時(shí)間:" + (end - start) + "ms");
    }
}

image.png

寫(xiě)入100個(gè)環(huán)境變量

package org.yscz.aiks;

import java.util.HashMap;
import java.util.Map;

/**
 * @author suhuamo
 * @slogan 巨人給你鞠躬,是為了讓陽(yáng)光也照射到你。
 * @date 2024-01-16
 * @description
 */
public class Main {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        Map<String, String> environmentVariables = new HashMap<>();
        for (int i = 0; i < 100; i++) {
            environmentVariables.put("VAR" + i, "value" + i);
        }
        OSUtil.setSystemEnvironmentVariables(environmentVariables);
        long end = System.currentTimeMillis();
        System.out.println("當(dāng)前消耗時(shí)間:" + (end - start) + "ms");
    }
}

image.png

分析

第一個(gè)還慢一點(diǎn)是因?yàn)椴煌瑫r(shí)間,電腦的運(yùn)行內(nèi)存情況不同,但可以基本上看出效率和寫(xiě)入環(huán)境變量的個(gè)數(shù)無(wú)關(guān)。

分析for循環(huán)中每一次寫(xiě)入注冊(cè)表的執(zhí)行速度。

    /**
     * 批量寫(xiě)入環(huán)境變量
     * @param systemEnvironmentVariables 需要寫(xiě)入的環(huán)境變量,<k:v> 對(duì)應(yīng) <環(huán)境變量名稱(chēng):環(huán)境變量的值>
     * @return void
     * @version 2.2
     * @author suhuamo
     */
    public static void setSystemEnvironmentVariables(Map<String, String> systemEnvironmentVariables) {
        int idx = 0;
        // 遍歷每一組需要寫(xiě)入的環(huán)境變量
        for (Map.Entry<String, String> entry : systemEnvironmentVariables.entrySet()) {
            long start = System.currentTimeMillis();
            // 將該組環(huán)境變量的內(nèi)容寫(xiě)入注冊(cè)表文件中
            Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, registryPath, entry.getKey(), entry.getValue());
            long end = System.currentTimeMillis();
            System.out.printf("第%d組環(huán)境變量寫(xiě)入完成,耗時(shí)%dms%n",++idx, end - start);
        }
    }

輸出內(nèi)容:

輸出內(nèi)容第1組環(huán)境變量寫(xiě)入完成,耗時(shí)1000ms

第2組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第3組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第4組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第5組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第6組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第7組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第8組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第9組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第10組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第11組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第12組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第13組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第14組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第15組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第16組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第17組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第18組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第19組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第20組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第21組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第22組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第23組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第24組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第25組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第26組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第27組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第28組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第29組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第30組環(huán)境變量寫(xiě)入完成,耗時(shí)20ms

第31組環(huán)境變量寫(xiě)入完成,耗時(shí)2ms

第32組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第33組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第34組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第35組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第36組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第37組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第38組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第39組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第40組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第41組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第42組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第43組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第44組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第45組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第46組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第47組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第48組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第49組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第50組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第51組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第52組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第53組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第54組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第55組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第56組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第57組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第58組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第59組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第60組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第61組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第62組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第63組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第64組環(huán)境變量寫(xiě)入完成,耗時(shí)6ms

第65組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第66組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第67組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第68組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第69組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第70組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第71組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第72組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第73組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第74組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第75組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第76組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第77組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第78組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第79組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第80組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第81組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第82組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第83組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第84組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第85組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第86組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第87組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第88組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第89組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第90組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第91組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第92組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第93組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第94組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第95組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第96組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第97組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第98組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

第99組環(huán)境變量寫(xiě)入完成,耗時(shí)1ms

第100組環(huán)境變量寫(xiě)入完成,耗時(shí)0ms

當(dāng)前消耗時(shí)間:1118ms

可以看到,只有第一次寫(xiě)入環(huán)境變量時(shí)很慢,接下來(lái)的每一次幾乎都沒(méi)有消耗時(shí)間:

image.png

image.png

擴(kuò)展

另一種寫(xiě)入環(huán)境變量的方法,就是通過(guò)cmd命令setx name value /M寫(xiě)入環(huán)境變量,每一次寫(xiě)入的時(shí)間是相同的,100ms~500ms。

    /**
     * 設(shè)置環(huán)境變量
     * @param variableName
     * @param variableValue
     */
    public static boolean setEnvironmentVariable(String variableName, String variableValue) {
        // 執(zhí)行 setx 命令來(lái)設(shè)置環(huán)境變量
        try {
            String command = "setx " + variableName + " \"" + variableValue + "\" /M";
            Process process = Runtime.getRuntime().exec(command);

            // 等待命令執(zhí)行完成
            int exitCode = process.waitFor();

            if (exitCode == 0) {
                log.info("設(shè)置:{}環(huán)境變量成功,生成內(nèi)容為:{}", variableName, variableValue);
            } else {
                log.error("設(shè)置:{}環(huán)境變量失敗,生成內(nèi)容為:{}", variableName, variableValue);
                return false;
            }
        } catch (IOException | InterruptedException e) {
            log.error("設(shè)置環(huán)境變量時(shí)出現(xiàn)異常,異常原因:{}",e.getMessage());
            return false;
        }
        return true;
    }

到此這篇關(guān)于使用java批量寫(xiě)入環(huán)境變量的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)java批量寫(xiě)入環(huán)境變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • java數(shù)據(jù)庫(kù)操作類(lèi)演示實(shí)例分享(java連接數(shù)據(jù)庫(kù))

    java數(shù)據(jù)庫(kù)操作類(lèi)演示實(shí)例分享(java連接數(shù)據(jù)庫(kù))

    java數(shù)據(jù)庫(kù)操作類(lèi)演示實(shí)例分享,大家參考使用吧
    2013-12-12
  • Spring基于注解配置AOP詳解

    Spring基于注解配置AOP詳解

    這篇文章主要介紹了Spring基于注解配置AOP詳解,Spring 的 AOP 功能是基于 AspectJ 實(shí)現(xiàn)的,支持使用注解聲明式定義 AOP 切面,Spring 基于注解配置 AOP 需要啟用 AspectJ 自動(dòng)代理功能,需要的朋友可以參考下
    2023-09-09
  • Java利用反射實(shí)現(xiàn)框架類(lèi)的方法實(shí)例

    Java利用反射實(shí)現(xiàn)框架類(lèi)的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Java利用反射實(shí)現(xiàn)框架類(lèi)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • java 取模與取余的區(qū)別說(shuō)明

    java 取模與取余的區(qū)別說(shuō)明

    這篇文章主要介紹了java 取模與取余的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • JavaWeb連接數(shù)據(jù)庫(kù)MySQL的操作技巧

    JavaWeb連接數(shù)據(jù)庫(kù)MySQL的操作技巧

    數(shù)據(jù)庫(kù)是編程中重要的一部分,它囊括了數(shù)據(jù)操作,數(shù)據(jù)持久化等各方面。在每一門(mén)編程語(yǔ)言中都占有相當(dāng)大的比例。本次,小編以MySQL為例,使用mvc編程思想,給大家講解下javaweb對(duì)數(shù)據(jù)庫(kù)的操作
    2017-02-02
  • javaweb開(kāi)發(fā)提高效率利器JRebel詳解

    javaweb開(kāi)發(fā)提高效率利器JRebel詳解

    這篇文章主要介紹了javaweb開(kāi)發(fā)提高效率利器JRebel詳解,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 解決SpringBoot在IDEA中熱部署失效問(wèn)題

    解決SpringBoot在IDEA中熱部署失效問(wèn)題

    熱部署是指程序運(yùn)行過(guò)程中實(shí)時(shí)更新或替換其組件的技術(shù),即項(xiàng)目正在啟動(dòng)中,修改了配置文件中某個(gè)值或者添加了某個(gè)方法或者修改了某個(gè)方法參數(shù),本文給大家介紹了解決SpringBoot在IDEA中熱部署失效問(wèn)題,需要的朋友可以參考下
    2024-01-01
  • 關(guān)于Nacos和Eureka的區(qū)別及說(shuō)明

    關(guān)于Nacos和Eureka的區(qū)別及說(shuō)明

    這篇文章主要介紹了關(guān)于Nacos和Eureka的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • springboot與mybatis整合實(shí)例詳解

    springboot與mybatis整合實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了springboot與mybatis整合實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • java?設(shè)計(jì)模式從風(fēng)控鏈理解責(zé)任鏈模式

    java?設(shè)計(jì)模式從風(fēng)控鏈理解責(zé)任鏈模式

    這篇文章主要為大家介紹了java?設(shè)計(jì)模式從風(fēng)控鏈理解責(zé)任鏈模式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05

最新評(píng)論