我正在尝试编写一个程序,该程序将显示并能够使用JFrame窗口更新您的IP地址设置。我正在寻找纯粹在Windows上运行,所以我试图能够使用netsh windows命令来检索/设置细节。
windows命令:
netsh interface ip show config name="Local Area Connection" | Find "IP"
我完全按照我想要的方式返回,但是我写的代码不会通过管道工作,只有当我写到“本地连接”部分时它才会起作用。
有没有办法使用管道功能才能专门返回IP地址?我读过你可以将这行作为字符串数组传递,即String [] cmd = netsh ........
package ipchanger;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class test {
private String CMD;
public void executecommand(String CMD) {
this.CMD = CMD;
try {
// Run whatever string we pass in as the command
Process process = Runtime.getRuntime().exec(CMD);
// Get input streams
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
// Read command standard output
String s;
System.out.println("Standard output: ");
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
// Read command errors
System.out.println("Standard error: ");
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
public test() {
String FINDIP = "netsh interface ip show config name=\"Local Area Connection\" | Find \"IP\"";
//System.out.println(FINDIP);
executecommand(FINDIP);
}
public static void main(String[] args) {
new test();
}
}
以为你们可以提供帮助。
答案 0 :(得分:6)
幸运的是,有一种方法可以运行包含管道的命令。该命令必须以cmd /C
为前缀。 e.g:
public static void main(String[] args) throws Exception {
String command = "cmd /C netstat -ano | find \"3306\"";
Process process = Runtime.getRuntime().exec(command);
process.waitFor();
if (process.exitValue() == 0) {
Scanner sc = new Scanner(process.getInputStream(), "IBM850");
sc.useDelimiter("\\A");
if (sc.hasNext()) {
System.out.print(sc.next());
}
sc.close();
} else {
Scanner sc = new Scanner(process.getErrorStream(), "IBM850");
sc.useDelimiter("\\A");
if (sc.hasNext()) {
System.err.print(sc.next());
}
sc.close();
}
process.destroy();
}
备注的
IBM850
编码。请参阅 Default character encoding for java console output 。useDelimiter("\\A")
。