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

未通过ProcessBuilder Java找到shp2pgsql、psql命令,java,postgis,processbuilder,Java,Postgis,Processbuilder,以下命令在命令行中运行良好 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 = ne

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

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/bin
usr/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();

你只是让我的任务更简单了..是的,这是因为环境和
/bin/sh
-c