通过 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/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();
以下命令在命令行中运行良好
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();