猿问

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

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


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();

 }


MM们
浏览 392回答 1
1回答

动漫人物

似乎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();
随时随地看视频慕课网APP

相关分类

Java
我要回答