Java中如何将调用netstat的命令行输出保存为字符串并在Notepad++查看
捕获Netstat命令输出到Java字符串并在编辑器内打印
当然可以实现!你当前的代码是通过start cmd.exe /K启动了一个新的命令行窗口来执行netstat,所以输出会跑到那个独立窗口里。要把输出抓回到Java程序中,然后在Notepad++的控制台里打印,核心是处理子进程的输入流——Runtime.exec()返回的Process对象能让我们读取命令的输出内容。
核心思路
- 去掉
start cmd.exe /K:这个参数会强制打开新窗口,我们不需要它,直接用cmd /c netstat让命令在后台执行,输出直接导向Java进程。 - 读取子进程的输出流:通过
Process.getInputStream()获取netstat命令的标准输出,用字符流读取器把内容转成字符串。 - 处理错误流(关键):如果命令执行出错,错误信息会写到错误流,不读取的话子进程可能会因为缓冲区满而卡住,所以也要处理这部分。
完整实现代码(兼容Java 8及以下)
import java.io.BufferedReader; import java.io.InputStreamReader; class Netstat { public static void main(String[] args) { try { // 执行netstat命令,不启动新窗口 Process netstatProcess = Runtime.getRuntime().exec("cmd /c netstat"); // 读取命令的标准输出 BufferedReader outputReader = new BufferedReader( new InputStreamReader(netstatProcess.getInputStream()) ); String line; StringBuilder outputContent = new StringBuilder(); // 逐行读取输出并拼接 while ((line = outputReader.readLine()) != null) { outputContent.append(line).append(System.lineSeparator()); } // 等待命令执行完成,确保所有输出都被读取 int exitCode = netstatProcess.waitFor(); // 在编辑器控制台打印捕获到的输出 System.out.println("=== Netstat 输出结果 ==="); System.out.println(outputContent.toString()); // 处理错误输出,避免进程阻塞 BufferedReader errorReader = new BufferedReader( new InputStreamReader(netstatProcess.getErrorStream()) ); StringBuilder errorContent = new StringBuilder(); while ((line = errorReader.readLine()) != null) { errorContent.append(line).append(System.lineSeparator()); } // 如果命令执行失败,打印错误信息 if (exitCode != 0) { System.err.println("命令执行失败,退出码:" + exitCode); System.err.println("错误信息:"); System.err.println(errorContent.toString()); } // 关闭流资源 outputReader.close(); errorReader.close(); } catch (Exception e) { System.out.println("发生异常:"); e.printStackTrace(); } } }
更简洁的Java 9+版本
如果你的Java版本是9及以上,可以用ProcessBuilder的API简化代码,还能合并标准输出和错误流,减少代码量:
import java.io.IOException; import java.util.Scanner; class Netstat { public static void main(String[] args) { try { Process netstatProcess = new ProcessBuilder("cmd", "/c", "netstat") .redirectErrorStream(true) // 把错误输出合并到标准输出 .start(); // 一次性读取所有输出内容 Scanner outputScanner = new Scanner(netstatProcess.getInputStream()) .useDelimiter("\\A"); // 以输入流开头为分隔符,读取全部内容 String outputContent = outputScanner.hasNext() ? outputScanner.next() : ""; // 等待命令执行完成 netstatProcess.waitFor(); // 打印结果 System.out.println("=== Netstat 输出结果 ==="); System.out.println(outputContent); outputScanner.close(); } catch (IOException | InterruptedException e) { System.out.println("发生异常:"); e.printStackTrace(); } } }
效果说明
修改后的代码运行时,不会弹出新的命令行窗口,netstat的所有输出都会被捕获到Java字符串中,最后通过System.out.println()打印出来。在Notepad++中用NppExec等插件运行代码时,输出就会直接显示在编辑器的内置控制台里,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Tybe
相关产品推荐
相关产品推荐

