利用windows自带的winsat工具获得硬盘顺序读写速度
  XBU81Hc6wfrv 2023年11月13日 28 0

源代码如下:

package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WinsatDiskRunner {
    public static void main(String[] args) {
        try {
            // 创建ProcessBuilder对象并设置命令及参数
            ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", "winsat disk -drive c");

            // 执行命令
            Process process = processBuilder.start();

            // 读取命令输出
            InputStream inputStream = process.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
            String line;
            boolean startReading = false; // 标志位,表示是否开始读取测速数据
            Pattern readPattern = Pattern.compile("Disk  Sequential 64.0 Read\\s+(\\d+\\.\\d+)\\s+MB/s");
            Pattern writePattern = Pattern.compile("Disk  Sequential 64.0 Write\\s+(\\d+\\.\\d+)\\s+MB/s");
            while ((line = reader.readLine()) != null) {
                if (line.contains("Disk  Sequential 64.0 Read")) {
                    Matcher matcher = readPattern.matcher(line);
                    if (matcher.find()) {
                        String readMbpsValue = matcher.group(1);
                        System.out.println(readMbpsValue);
                    }
                }
                if (line.contains("Disk  Sequential 64.0 Write")) {
                    Matcher matcher = writePattern.matcher(line);
                    if (matcher.find()) {
                        String writeMbpsValue = matcher.group(1);
                        System.out.println( writeMbpsValue);
                    }
                }
                if (line.contains("命令执行完毕")) {
                    break; // 结束循环,不再读取后续内容
                }
            }

            // 等待命令执行完成
            int exitCode = process.waitFor();
            System.out.println("命令执行完毕,退出码:" + exitCode);

            // 关闭资源
            reader.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

输出结果如下:

利用windows自带的winsat工具获得硬盘顺序读写速度_Code

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  nQkVcpdWfLDr   2023年11月13日   16   0   0 DesktopSystem重启
  4crWjjQBqFOy   2023年11月13日   13   0   0 javamavenandroid
XBU81Hc6wfrv