源代码如下:
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();
}
}
}
输出结果如下:
标签:winsat,java,windows,matcher,读写,Sequential,Pattern,import,line From: https://blog.51cto.com/u_16328460/8072237