You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:53:44