Como obtener información del sistema desde Java - Más allá de lo que ves

jueves, 2 de abril de 2009

Como obtener información del sistema desde Java

Cambiamos el tercio y hoy voy a comentar una necesidad que nos ha surgido y pienso que para alguien que necesito lo mismo le puede ser muy útil.

Necesitaba obtener desde Java la información referente a Sistema Operativo, procesador, RAM, nombre de la máquina... y googleando me tope con Sigar, una librería bajo licencia GNU GPL que entre otras muchas cosas hace justo lo que necesitaba, obtener la información que indico anteriormente.

Os pongo una clase de ejemplo.

1. Para que funcione lo único necesario es decargarse el paquete de Sigar
2. Descomprimir y sigar.jar al lib de la clase que se ejecute.
3. Muy importante para que funcione se deben copiar algunas librerias que vienen en sigar-bin/lib al directorio bin del jdk o jre que se utilice para ejecutar la clase compilada de prueba. Para el caso de usarlo en sistemas windows es suficiente con copiar: sigar-x86-nnt.dll y sigar-amd86-nnt.dll

Por último os dejo la clase:

import org.hyperic.sigar.*;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class GetSystemInfo {
private static Sigar sigar = new Sigar();

public static void main(String[] args){
SystemInfo si = new SystemInfo();

System.out.println("Nombre Equipo : " +si.getNetInfo().getHostName());
System.out.println("Sistema operativo : " + si.getOs().toMap());

for(int i = 0; i < cpuinfo =" null;" cpuinfo =" sigar.getCpuInfoList();" mem =" null;" mem =" sigar.getMem();">= 1024){
return (new BigDecimal(mem.getRam())).divide(new BigDecimal(1024),
2, RoundingMode.FLOOR) + " GB";
} else {
return mem.getRam() + " MB";
}
}

public static SysInfo getOs(){
SysInfo sysInfo = new SysInfo();
try {
sysInfo.gather(sigar);

} catch (SigarException se) {
se.printStackTrace();
}
return sysInfo;
}

public static NetInfo getNetInfo(){
NetInfo netInfo = new NetInfo();
try {
netInfo.gather(sigar);

} catch (SigarException se) {
se.printStackTrace();
}
return netInfo;
}

static class SystemInfo {
CpuInfo[] procesadores;
String ram;
SysInfo os;
NetInfo netInfo;

public CpuInfo[] getProcesadores() {
return procesadores;
}

public void setProcesadores(CpuInfo[] procesadores) {
this.procesadores = procesadores;
}

public String getRam() {
return ram;
}

public void setRam(String ram) {
this.ram = ram;
}

public SysInfo getOs() {
return os;
}

public void setOs(SysInfo os) {
this.os = os;
}

public NetInfo getNetInfo() {
return netInfo;
}

public void setNetInfo(NetInfo netInfo) {
this.netInfo = netInfo;
}

SystemInfo() {
procesadores = GetSystemInfo.getProcesadores();
ram = GetSystemInfo.getRam();
os = GetSystemInfo.getOs();
netInfo = GetSystemInfo.getNetInfo();
}
}
}


El resultado que obtiene es:
Nombre del equipo : XP-PER
Sistema operativo : {Arch=x86, Name=Win32, VendorName=Windows XP, Description=Microsoft Windows XP, VendorVersion=XP, Machine=, Vendor=Microsoft, VendorCodeName=Whistler, PatchLevel=Service Pack 3, Version=5.1}
Procesaro [ 1] : {TotalSockets=1, Mhz=2186, Model=Core(TM)2 Duo CPU P8600 @ 2.40GHz, TotalCores=1, Vendor=Intel, CoresPerSocket=1}
Memoria RAM : 2.44 GB

2 comentarios:

  1. Está muy bueno pero estaría bien si agregas la info de lo que hay que agregar en Linux y dónde se encuentran los directorios por ejemplo...

    ResponderEliminar
  2. puedes hacer un link de el proyecto ?

    ResponderEliminar