通过 ProcessBuilder 找不到 shp2pgsql、psql 命令 Java

shp2pgsql, psql command not found through ProcessBuilder Java

以下命令在命令行中运行良好

shp2pgsql -s 4326 /Users/abc.shp | psql -U user1 -h localhost -p 5432 -d postgis

然而,当我 运行 使用 ProcessBuilder 在 Java 中执行以下命令时,它说找不到命令。这是代码:

 public static void main(String arg[]) throws Exception {

    ProcessBuilder pb =
                   new ProcessBuilder("/bin/sh -c shp2pgsql /Users/abc.shp | psql -U user1 -h localhost -p 5432 -d postgis");
    Process p = pb.start();
    showOutput(p.getInputStream(), System.out);
    showOutput(p.getErrorStream(), System.err);

}

private static void showOutput(final InputStream src, final PrintStream dest) {
    new Thread(new Runnable() {
        public void run() {
            Scanner sc = new Scanner(src);
            while (sc.hasNextLine()) {
                dest.println(sc.nextLine());
            }
        }
    }).start();
 }

看来Java不明白你环境的路径(psql或shp2pgsql..)在哪里

您需要指定路径才能执行。它通常在 /usr/local/binusr/bin 中。另外,请注意 "/bin/sh"-c" 的参数(您指定要执行的命令是字符串格式)是分开的。只需修改以下代码段。应该有用!!

String env = "/usr/local/bin/";
ProcessBuilder pb =
                   new ProcessBuilder("/bin/sh", "-c", env +"shp2pgsql /Users/abc.shp | "+env+"psql -U user1 -h localhost -p 5432 -d postgis");
    Process p = pb.start();