Sigar系列二:使用Sigar获取磁盘相关信息

 

使用Sigar获取磁盘相关信息

       做java的人都知道获取磁盘相关的信息是一件很痛苦的事情,因为jdk自身带的api满足不了我们的需求,因此很多人会专门呢针对不同的操作系统进行硬编码(例如在windows下写一套代码在linux下写一套代码),为了让大家都愉快的获取计算机磁盘信息,推荐大家使用Sigar这个jar包,它是跨平台使用的,满足目前大部分全世界上的计算机操作系统(对于我们来说完全够了),对于不同的操作系统只需要引入相应的文件即可(例如windows下引入dll文件),方便使用,当然我还会介绍另一种获取磁盘信息的方法,不过没有sigar获得的信息全面。

       首先介绍非Sigar方式获取磁盘信息的方法:

 

import java.io.File;
import java.io.IOException;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;

import javax.swing.filechooser.FileSystemView;

/**
 * 磁盘信息
 * 
 * @author mxy QQ:987938582
 * 
 */
final public class SysDiskInfo implements java.io.Serializable {
	/**************** Disk *********************/
	private boolean isSysDisk;// 是不是系统盘
	private String diskName;// 磁盘名称
	private String driveLetter;// 驱动器,比如window下的 d:
	private String diskType;// 文件系统类型
	private String totlaDiskSpace;// 磁盘容量
	private String availDiskSpace;// 磁盘可用容量
	private String inUseDiskSpace;// 已用磁盘容量
	private String freeDiskSpace;// 未用用磁盘容量
	private String useRate;// 使用率
	/**************** Disk *********************/
	
	/**
	 * 获取磁盘信息
	 * @return
	 */
	public static List<SysDiskInfo> fillSysDiskInfo(){
		List<SysDiskInfo> dlist = null;
		String localDiskName = "本地磁盘";
		String removableDiskName = "可移动磁盘";
		String enLocalDiskName = "Local Disk";
		String enRemovableDiskName = "Removable Disk";
		FileSystemView fsv = FileSystemView.getFileSystemView();// 获取FileSystemView对象
		double unit = 1024 * 1024 * 1024;
		File[] roots = File.listRoots();
		dlist = new ArrayList<SysDiskInfo>();
		for (File file : roots) {
			SysDiskInfo diskInfo = new SysDiskInfo();
			diskInfo.setDiskName(fsv.getSystemDisplayName(file));//磁盘名称以及盘符,例如:本地磁盘(C:)
			try {
				diskInfo.setDriveLetter(file.getCanonicalPath());//磁盘盘符
			} catch (IOException e) {
				e.printStackTrace();
			}
			String diskName = fsv.getSystemTypeDescription(file); // 获取磁盘的类型描述信息
			if (diskName.startsWith(localDiskName) || diskName.startsWith(enLocalDiskName)){ // 当磁盘为本地磁盘时
				//本地磁盘
				long totalDiskSpace = file.getTotalSpace(); // 获取磁盘的总空间
				//totalDiskSpace>>30相当于totalDiskSpace/(1024*1024*1024)
				//diskInfo.setTotlaDiskSpace(numToPoint(totalDiskSpace>>30,2));//磁盘的总空间
				diskInfo.setTotlaDiskSpace(numToPoint(totalDiskSpace / unit,2));//磁盘的总空间
				long freeDiskSpace = file.getFreeSpace(); // 获取磁盘的可用空间
				diskInfo.setFreeDiskSpace(numToPoint(freeDiskSpace / unit,2));// 磁盘的可用空间
				diskInfo.setAvailDiskSpace(numToPoint(freeDiskSpace / unit,2));// 磁盘的可用空间
				long inUseDiskSpace = totalDiskSpace - freeDiskSpace;// 已用磁盘空间
				diskInfo.setInUseDiskSpace(numToPoint(inUseDiskSpace / unit,2));//已用磁盘空间
				diskInfo.setUseRate(divisionToPoint(inUseDiskSpace, totalDiskSpace,2));// 磁盘使用率
			} else if (diskName.startsWith(removableDiskName) || diskName.startsWith(enRemovableDiskName)){ // 当磁盘为可移动磁盘时
				//移动磁盘
				long totalDiskSpace = file.getTotalSpace(); // 获取磁盘的总空间
				diskInfo.setTotlaDiskSpace(numToPoint(totalDiskSpace / unit,2));//磁盘的总空间
				long freeDiskSpace = file.getUsableSpace(); // 获取磁盘的可用空间
				diskInfo.setFreeDiskSpace(numToPoint(freeDiskSpace / unit,2));// 磁盘的可用空间
				diskInfo.setAvailDiskSpace(numToPoint(freeDiskSpace / unit,2));// 磁盘的可用空间
				long inUseDiskSpace = totalDiskSpace - freeDiskSpace;// 已用磁盘空间
				diskInfo.setInUseDiskSpace(numToPoint(inUseDiskSpace / unit,2));//已用磁盘空间
				diskInfo.setUseRate(divisionToPoint(inUseDiskSpace, totalDiskSpace,2));// 磁盘使用率
			}else {
				continue;
			}
			dlist.add(diskInfo);
		}
		return dlist;
	}
	
	/**
	 * 两数相除获取指定位小数
	 * 
	 * @param startNum
	 *            被除数 1/2中的1
	 * @param endNum
	 *            除数1/2中的2,注意:除数不能为0
	 * @param length
	 *            要保留几位小数
	 * @return 相除后指定位小数的结果
	 */
	public static String divisionToPoint(long startNum, long endNum, int length)
			throws ArithmeticException {
		if (endNum == 0) {
			// 除数不能为0
			throw new ArithmeticException("除数不能为0");
		}
		double num = (double)(startNum/1) / endNum;
		return numToPoint(num, length);
	}
	
	/**
	 * 将数字转为小数点
	 * 
	 * @param num
	 *            double类型的小数
	 * @param length
	 *            要保留的小数点位数
	 * @return 截取的指定为小数
	 */
	public static String numToPoint(double num, int length) {
		NumberFormat nf = NumberFormat.getNumberInstance();
		nf.setMaximumFractionDigits(length);
		return nf.format(num);
	}

	public boolean isSysDisk() {
		return isSysDisk;
	}
	public void setSysDisk(boolean isSysDisk) {
		this.isSysDisk = isSysDisk;
	}
	public String getDiskName() {
		return diskName;
	}
	public void setDiskName(String diskName) {
		this.diskName = diskName;
	}
	public String getDriveLetter() {
		return driveLetter;
	}
	public void setDriveLetter(String driveLetter) {
		this.driveLetter = driveLetter;
	}
	public String getTotlaDiskSpace() {
		return totlaDiskSpace;
	}
	public void setTotlaDiskSpace(String totlaDiskSpace) {
		this.totlaDiskSpace = totlaDiskSpace;
	}
	public String getAvailDiskSpace() {
		return availDiskSpace;
	}
	public void setAvailDiskSpace(String availDiskSpace) {
		this.availDiskSpace = availDiskSpace;
	}
	public String getInUseDiskSpace() {
		return inUseDiskSpace;
	}
	public void setInUseDiskSpace(String inUseDiskSpace) {
		this.inUseDiskSpace = inUseDiskSpace;
	}
	public String getFreeDiskSpace() {
		return freeDiskSpace;
	}
	public void setFreeDiskSpace(String freeDiskSpace) {
		this.freeDiskSpace = freeDiskSpace;
	}
	public String getDiskType() {
		return diskType;
	}
	public void setDiskType(String diskType) {
		this.diskType = diskType;
	}
	public String getUseRate() {
		return useRate;
	}
	public void setUseRate(String useRate) {
		this.useRate = useRate;
	}
	
	public static void main(String[] args) {
		List<SysDiskInfo> dlist = fillSysDiskInfo();
		for (int i = 0; i < dlist.size(); i++) {
			System.out.println();
			SysDiskInfo disk = dlist.get(i);
			//System.out.println("是不是系统盘:"+disk.isSysDisk());// 是不是系统盘
			System.out.println("驱动器:"+disk.getDriveLetter());// 驱动器,比如window下的 d:
			//System.out.println("文件系统类型:"+disk.getDiskType());// 文件系统类型
			System.out.println("磁盘容量:"+ disk.getTotlaDiskSpace()+"G");// 磁盘容量
			System.out.println("磁盘使用率:"+ Double.valueOf(disk.getUseRate())*100 +"%");
			System.out.println("磁盘已用容量:"+ disk.getInUseDiskSpace() +"G");
			System.out.println("磁盘可用容量:"+ disk.getFreeDiskSpace() +"G");
		}
	}
}

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(sigar)