java如何獲取hdd序列號(hào)

在java里頭如何獲取硬盤(pán)的序列號(hào)呢,這里涉及了跨平臺(tái)的問(wèn)題,不同的操作系統(tǒng)的查看命令不一樣,那么java里頭如何去適配呢。這里使用了oshi這個(gè)項(xiàng)目來(lái)獲取。

oshi

全稱是Native Operating System and Hardware Information。使用的是jna的方式而不是jni的形式來(lái)進(jìn)行本地調(diào)用的。

  • jni
    JNI(Java Native Interface)是Java語(yǔ)言本身提供的調(diào)用本地已編譯的函數(shù)庫(kù)的方法,本身具有跨平臺(tái)性,可以在不同的機(jī)器上調(diào)用不同的本地庫(kù)。使用JNI調(diào)用.dll/.so共享類庫(kù)我們首先需要另外使用C語(yǔ)言寫(xiě)一個(gè).dll/.so共享庫(kù),使用SUN規(guī)定的數(shù)據(jù)結(jié)構(gòu)替代C語(yǔ)言的數(shù)據(jù)結(jié)構(gòu),調(diào)用已有的dll/so中公布的函數(shù)。然后再在Java中載入這個(gè)適配器dll/so,再編寫(xiě)Java native函數(shù)作為dll中函數(shù)的代理。經(jīng)過(guò)2個(gè)繁瑣的步驟才能在Java中調(diào)用本地代碼。

  • jna
    JNA(Java Native Access)框架是一個(gè)開(kāi)源的Java框架,是SUN公司主導(dǎo)開(kāi)發(fā)的,建立在經(jīng)典的JNI的基礎(chǔ)之上的一個(gè)框架。使用JNA,不需要再編寫(xiě)適配用的.dll/.so,只需要在Java中編寫(xiě)一個(gè)接口和一些代碼,作為.dll/.so的代理,就可以在Java程序中調(diào)用dll/so。

maven

        <dependency>
            <groupId>com.github.oshi</groupId>
            <artifactId>oshi-core</artifactId>
            <version>3.4.3</version>
        </dependency>

獲取方法

        SystemInfo si = new SystemInfo();
        HardwareAbstractionLayer hal = si.getHardware();
        HWDiskStore[] stores = hal.getDiskStores();
        Arrays.stream(stores).forEach(e -> {
            System.out.println(e.getName() + ":" + e.getSerial());
        });

doc

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容