3

Java からのプロセスの実行に関して多くの解決済みの質問があることは知っていますが、提供された回答を使用しても問題を解決できません。Javaアプリケーションからpostgresqlデータベースのバックアップを作成しようとしています。次のコードを使用します

        //ProcessBuilder probuilder = new ProcessBuilder(new String[]{"cmd","/c","D:/PostgreSQL 8.2/bin/pg_dump.exe","-U","usr","-i","-h","localhost","-p","5432","-F","c","-b","-f","D:/backup test/backups/test_27-1-2013_210.backup", "test"});
        //ProcessBuilder probuilder = new ProcessBuilder(new String[]{"cmd","/c","D:\\PostgreSQL 8.2\\bin\\pg_dump.exe","-U","usr","-i","-h","localhost","-p","5432","-F","c","-b","-f","D:\\backup test\\backups\\test_27-1-2013_210.backup", "test"});
        ProcessBuilder probuilder = new ProcessBuilder(new String[]{"cmd","/c","\"D:\\PostgreSQL 8.2\\bin\\pg_dump.exe\"","-U","usr","-i","-h","localhost","-p","5432","-F","c","-b","-f","\"D:\\backup test\\backups\\test_27-1-2013_210.backup\"", "test"});
        Map<String, String> env = probuilder.environment();
        env.put("PGPASSWORD", "mypass");

        final Process process = probuilder.start();

上記のコードを実行した後、次のエラーが発生します。 D:\PostgreSQL' is not recognized as an internal or external command, operable program or batch file.

問題は、バックアップ ファイルへのパスにスペースが含まれている場合にのみ発生し、それ以外の場合はバックアップが作成されます。ファイル パスにスラッシュとバックスラッシュの両方を使用しようとしましたが、ファイル パスを引用しましたが、毎回同じエラーが発生します。コマンドはコマンドプロンプトから実行できます。

私が間違っていること。ProcessBuilder のスペースを含むパラメーターの数に関していくつかの制限はありますか? ありがとう

4

1 に答える 1

5

はexe(.batではない)であるためpg_dump.exe、まったく必要ありませんcmd。おそらく、解決するよりも多くの問題を引き起こしています。を直接呼び出してexe、ファイル パスを囲む余分な引用符を削除します。

new String[]{"D:\\PostgreSQL 8.2\\bin\\pg_dump.exe","-U","usr","-i",
  "-h","localhost","-p","5432","-F","c","-b",
  "-f","D:\\backup test\\backups\\test_27-1-2013_210.backup", "test"}
于 2013-02-27T12:00:06.833 に答える