【发布时间】:2020-12-22 01:42:13
【问题描述】:
我正在使用 java 中的进程构建器从 cmd 获取硬件数据。
//get info from cmd
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("cmd.exe", "/c", "systeminfo ");
try {
Process process = processBuilder.start();
BufferedReader reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
//write the output to the variables
String line;
//a loop which ensures all the data is read in
while ((line = reader.readLine()) != null) {
hardwareInfo.add(line);//hardwareInfo is an arraylist i currently save all this information to
}
这会返回所有相关信息以及更多。我的输出如下所示:
[, Host Name: LJDESKTOP, OS Name: Microsoft Windows 10 Education, OS Version: 10.0.18363 N/A Build 18363
等等……
我想根据它们的名称将 一些 这些字段添加到 SQL 数据库中(例如,主机名:- 是,操作系统名称:- 否)。 SQL 连接已建立,我只需要找到保存这些变量的最佳方法,以便将它们直接插入到我的数据库中。
那么我如何摆脱Host Name:,仍然在我的数据库中输入LJDESKTOP,以及我从cmd命令获得的其余信息的相同原理。
我也在尝试考虑效率,我希望这在计算上尽可能“轻”,但这不是必需的。
到目前为止我所做的尝试:
-
我尝试在“:”处为每个变量拆分字符串并进行修剪。这为我提供了我需要的确切信息,但我无法将其保存到单个变量中。这是因为我修剪的部分是我确定我的变量是什么的方式。 (我可以将修剪功能添加到我的二传手吗?)
-
我试过了:
while ((line = reader.readLine()) != null) {
if (line.startsWith("Host Name:")) { setHostname(line.replaceFirst("Host Name: ", ""));}
if 语句为每个变量重复,但是每次通过 while 循环时,这会将每个变量添加到我的数组中。
【问题讨论】:
-
那么到目前为止你尝试过什么?
-
这能回答你的问题吗? How to get the insert ID in JDBC?
-
看起来它可以使用一些字符串解析。删除'[',用逗号分割字符串得到`主机名:LJDESKTOP`,用':'分割进一步得到成对的“主机名”,“LJDESKTOP”,剥离字符串以去除前后的空格,你最终会得到“主机名”,“LJDESKTOP”。此时,您将能够比较您的键(如“主机名”)并找出在 JDBC 调用中放置值的位置(如“LJDESKTOP”)。
-
@SaahilMalhotra 不,我不相信这回答了我的问题,因为我没有从我的数据库中获取信息。我从我的电脑获取信息,然后我想根据 cmd 返回的字段名称输入到我的数据库中。
-
@vc669 抱歉,我可能真的不擅长解释这一点,但是是的,我认为这符合我认为解决方案的正确思路,但我不知道它的代码。如果你能给我几分钟,我会发布我迄今为止尝试过的内容。另外我需要在执行此操作之前将其保存为变量,这会增加额外的复杂性,我无法理解...将 LJDESKTOP 保存为变量“主机名”(没有“主机名:”)然后输入该变量的值我的数据库。
标签: java sql cmd processbuilder dataformat