p0006666888 2022-05-15 14:00 采纳率: 100%
浏览 22
已结题

Java编程实验,有没有人解答

定义一个motherboard抽象类,包含内存硬盘两个抽象方法,用两个类继承抽象类,使用computer类显示主板内存硬盘大小,最后一个测试类(main)

  • 写回答

1条回答 默认 最新

  • WaitIKnowYou 2022-05-15 15:35
    关注

    你题目继承关系说的不太清楚 ,你看我写的这个需要改什么吧。
    这里用了sigar.jar包 下载地址https://sourceforge.net/projects/sigar/
    1.motherboard类

    import org.hyperic.sigar.SigarException;
    
    public abstract class MotherBoard {
        public abstract void memory() throws SigarException;//获取内存信息
        public abstract void file() throws SigarException;//获取硬盘信息
        
    }
    
    
    

    2.computer类

    import org.hyperic.sigar.FileSystem;
    import org.hyperic.sigar.FileSystemUsage;
    import org.hyperic.sigar.Mem;
    import org.hyperic.sigar.Sigar;
    import org.hyperic.sigar.SigarException;
    import org.hyperic.sigar.Swap;
    
    public class Computer  extends MotherBoard{
    
        @Override
        public void memory() throws SigarException {
    
            Sigar sigar = new Sigar();
    
            Mem mem = sigar.getMem();
    
            // 内存总量
    
            System.out.println("内存总量:    " + mem.getTotal() / 1024L + "K av");
    
            // 当前内存使用量
    
            System.out.println("当前内存使用量:    " + mem.getUsed() / 1024L + "K used");
    
            // 当前内存剩余量
    
            System.out.println("当前内存剩余量:    " + mem.getFree() / 1024L + "K free");
    
            Swap swap = sigar.getSwap();
    
            // 交换区总量
    
            System.out.println("交换区总量:    " + swap.getTotal() / 1024L + "K av");
    
            // 当前交换区使用量
    
            System.out.println("当前交换区使用量:    " + swap.getUsed() / 1024L + "K used");
    
            // 当前交换区剩余量
    
            System.out.println("当前交换区剩余量:    " + swap.getFree() / 1024L + "K free");
            
        }
    
        @Override
        public void file() throws SigarException {
             Sigar sigar = new Sigar();
    
                FileSystem fslist[] = sigar.getFileSystemList();
    
                for (int i = 0; i < fslist.length; i++)
    
                {
    
                    System.out.println("分区的盘符名称" + i);
    
                    FileSystem fs = fslist[i];
    
                    // 分区的盘符名称
    
                    System.out.println("盘符名称:    " + fs.getDevName());
    
                    // 分区的盘符名称
    
                    System.out.println("盘符路径:    " + fs.getDirName());
    
                    System.out.println("盘符标志:    " + fs.getFlags());//
    
                    // 文件系统类型,比如 FAT32、NTFS
    
                    System.out.println("盘符类型:    " + fs.getSysTypeName());
    
                    // 文件系统类型名,比如本地硬盘、光驱、网络文件系统等
    
                    System.out.println("盘符类型名:    " + fs.getTypeName());
    
                    // 文件系统类型
    
                    System.out.println("盘符文件系统类型:    " + fs.getType());
    
                    FileSystemUsage usage = null;
    
                    usage = sigar.getFileSystemUsage(fs.getDirName());
    
                    switch (fs.getType())
    
                    {
    
                        case 0: // TYPE_UNKNOWN :未知
    
                            break;
    
                        case 1: // TYPE_NONE
    
                            break;
    
                        case 2: // TYPE_LOCAL_DISK : 本地硬盘
    
                            // 文件系统总大小
    
                            System.out.println(fs.getDevName() + "总大小:    "
    
                                    + usage.getTotal() + "KB");
    
                            // 文件系统剩余大小
    
                            System.out.println(fs.getDevName() + "剩余大小:    "
    
                                    + usage.getFree() + "KB");
    
                            // 文件系统可用大小
    
                            System.out.println(fs.getDevName() + "可用大小:    "
    
                                    + usage.getAvail() + "KB");
    
                            // 文件系统已经使用量
    
                            System.out.println(fs.getDevName() + "已经使用量:    "
    
                                    + usage.getUsed() + "KB");
    
                            double usePercent = usage.getUsePercent() * 100D;
    
                            // 文件系统资源的利用率
    
                            System.out.println(fs.getDevName() + "资源的利用率:    "
    
                                    + usePercent + "%");
    
                            break;
    
                        case 3:// TYPE_NETWORK :网络
    
                            break;
    
                        case 4:// TYPE_RAM_DISK :闪存
    
                            break;
    
                        case 5:// TYPE_CDROM :光驱
    
                            break;
    
                        case 6:// TYPE_SWAP :页面交换
    
                            break;
    
                    }
    
                    System.out.println(fs.getDevName() + "读出:    "
    
                            + usage.getDiskReads());
    
                    System.out.println(fs.getDevName() + "写入:    "
    
                            + usage.getDiskWrites());
    
                }
    
                return;
            
        }
    
    }
    
    
    

    3.Main测试类

    import org.hyperic.sigar.SigarException;
    
    public abstract class Main extends MotherBoard{
        
        public static void main(String[] args) throws SigarException {
            Computer computer = new Computer();
            //打印硬盘信息
            computer.file();
            //打印内存信息
            computer.memory();
            
        }
    }
    
    
    

    运行截图

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月24日
  • 已采纳回答 5月16日
  • 创建了问题 5月15日