在 Java 中使用 Runtime.exec()

Jas*_*n S 5 java path exec

在 Java 中你需要做什么才能让 Runtime.exec() 运行路径上的程序?我正在尝试运行 gpsbabel ,我已将其放入路径(/usr/local/bin)中。

public class GpxLib {

    public static void main(String[] args) {
        try
        {
            Runtime r = Runtime.getRuntime();
            Process p = r.exec("gpsbabel -i garmin -f usb: -o gpx -F -");
            InputStream is = p.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            while (true)
            {
                String s = br.readLine();
                if (s == null)
                    break;
                System.out.println(s);
            }
            br.readLine();
        } catch (IOException e) {
            e.printStackTrace(System.err);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Bri*_*new 3

它将继承 Java 进程的路径。因此,无论 Java 进程具有什么环境,生成的进程也将具有什么环境。检查环境的方法如下:

Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
     System.out.format("%s=%s%n", envName, env.get(envName));
}
Run Code Online (Sandbox Code Playgroud)

你设置PATH 并导出了吗?如果您不导出它,则它不可用于子流程。

此外,您必须同时使用 stdout 和 stderr,以防止阻塞。否则,在某些情况下,东西会起作用,那么你生成的进程将输出不同数量的数据,一切都会停止。

有关更多详细信息,请参阅此答案。