LoginSignup
12
6

More than 5 years have passed since last update.

Javaでシステム情報を取得するライブラリ「OSHI」

Posted at

概要

Javaでシステム情報を取得できるOSHIというライブラリについてのメモです。

Sigarとの違い

システム情報を取得するライブラリとして他にSigarがありますが、下記の点でOSHIの方がいい感じです。

  • SigarはDLLなどのネイティブなバイナリが必要だが、OSHIの場合は不要
  • SigarはWindows版の場合、Java9以降では使用できない(JVMがクラッシュする!)が、OSHIは問題なく使用可能

インストール

build.gradle
dependencies {
    compile group: 'com.github.oshi', name: 'oshi-core', version: '3.13.0'
}

使ってみる

OSHIで取得できる情報を適当に抜粋して紹介します。右のコメントは私の環境での出力結果です。

OS情報

var si = new SystemInfo();
var os = si.getOperatingSystem();
// OSの種類
System.out.println(os.getFamily());  // macOS
// バージョン
System.out.println(os.getVersion().getVersion());  // 10.14.2
// メーカー
System.out.println(os.getManufacturer());  // Apple
// 何ビットか
System.out.println(os.getBitness());  // 64
// コードネーム
System.out.println(os.getVersion().getCodeName());  // Mojave

CPU情報

var si = new SystemInfo();
var hard = si.getHardware();
var cpu = hard.getProcessor();
// 物理プロセス数
System.out.println(cpu.getPhysicalProcessorCount());  // 4
// 論理プロセス数
System.out.println(cpu.getLogicalProcessorCount());  // 8
// 名前
System.out.println(cpu.getName());  // Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
// 識別子
System.out.println(cpu.getIdentifier());  // Intel64 Family 6 Model 70 Stepping 1
// ベンダID
System.out.println(cpu.getVendor());  // GenuineIntel
// コンテキストスイッチ数
System.out.println(cpu.getContextSwitches());  // 130336
// ロードアベレージ
System.out.println(cpu.getSystemLoadAverage());  // 2.65576171875

メモリ情報

var si = new SystemInfo();
var hard = si.getHardware();
var memory = hard.getMemory();
// トータルメモリ容量
System.out.println(memory.getTotal());  // 17179869184
// トータルスワップ容量
System.out.println(memory.getSwapTotal());  // 1073741824
// ページサイズ
System.out.println(memory.getPageSize());  // 4096
// 使用可能容量
System.out.println(memory.getAvailable());  // 5858844672

USBデバイス

var si = new SystemInfo();
var hard = si.getHardware();
var usbs = hard.getUsbDevices(false);
for(var usb : usbs) {
    // 色々あるのでとりあえずマウスに絞ってみる
    if(usb.getName().contains("Mouse")) {
        // 名前
        System.out.println(usb.getName());  // USB Laser Mouse
        // メーカー
        System.out.println(usb.getVendor());  // Logitech
    }
}

センサー

var si = new SystemInfo();
var hard = si.getHardware();
var sensor = hard.getSensors();
// CPU温度
System.out.println(sensor.getCpuTemperature());  // 48.75
// CPU電圧
System.out.println(sensor.getCpuVoltage());  // 3.63
// CPUファンスピード
System.out.println(Arrays.toString(sensor.getFanSpeeds()));  // [2159, 2000]

その他

多いので全部は紹介できないですが、上記以外にもファイルシステム情報、ディスク情報、プロセス情報、サウンドカード情報、電源情報などなど、様々な情報を取得することができます。

参考リンク

12
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6