首页 > 解决方案 > 从 Java 运行节点命令行模块

问题描述

我正在尝试在我的程序生成的 SVG 字符串上运行SVGO。SVGO 是全局安装的npm install -g svgo,通常可以在命令行上运行,如下所示:

cat image.svg | svgo -i - -o - > image-opt.svg

我正在使用标准输入和输出。Java中的等价物是:

Process process = new ProcessBuilder("svgo", "-i -", "-o -").start();

BufferedReader stdout = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedWriter stdin = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));

stdin.write("<svg>...</svg>");
stdin.flush();

Scanner scanner = new Scanner(stdout);
while (scanner.hasNextLine()) {
    System.out.println(scanner.nextLine());
}

我得到一个java.io.IOException: The pipe is being closed错误。如果我不刷新,我没有输出,stdout.readLine()返回 null。

svgo.cmd文件是一个位于 的脚本%APPDATA%/npm,由 npm 生成。

如何使用 Java 中的节点模块?

标签: javanode.jsnpmcommand-linestdout

解决方案


推荐阅读