web-dev-qa-db-ja.com

スペースを使用して複数のパラメーターをProcessBuilderに渡します

複数のパラメーターをprocessBuilderに渡し、パラメーターをスペースで区切りたいと思います。

これがコマンドです、

String[] command_ary = {dir+"library/crc"," -s ", fileName," ",addressRanges};

「fcrc」の後、「-p」の後、「filename」と「addressRange」の間にスペースを入れる必要があります。

ありがとうございました

8
mee

スペースを含める必要はありません。 ProcessBuilderがそれを処理します。スペースを入れずに、引数を1つずつ渡すだけです。

ProcessBuilder pb = new ProcessBuilder(
                         dir + "library/crc",
                         "-s",
                         fileName,
                         addressRanges);
22
assylias

コマンドラインでは、どちらが最初の引数で、どちらが2番目の引数であるかを知る必要があるため、コマンドラインの引数の間にスペースが必要です。ただし、ProcessBuilderを使用すると、配列を渡すことができるため、引数を区別するためにこれらのスペースを追加する必要はありません。 ProcessBuilderは、いくつかのチェックの後、コマンド配列をexecに直接渡します。例えば、

_private static final String Java_CMD = "Java";
private static final String CP = "-cp";

private static final String CLASS_PATH = "../bin";
private static final String PROG = "yr12.m07.b.Test";
private static final String[] CMD_ARRAY = { Java_CMD, CP, CLASS_PATH, PROG };
ProcessBuilder processBuilder = new ProcessBuilder(CMD_ARRAY);
_

上記のコードは完全に機能します。

また、ご利用いただけます

_Runtime.getRuntime().exec("Java -cp C:/testt Test");
_

ただし、ProcessBuilderを使用する方が便利です。理由のひとつは、引数にスペースが含まれている場合、_Java -cp C:/testt \"argument with space\"_のようにRuntime.getRuntime().exec()で引用符を渡す必要があるためですが、ProcessBuilderを使用するとそれを取り除くことができます。

_ProcessBuilder processBuilder = new ProcessBuilder("command", "The first argument", "TheSecondWithoutSpace");
_
11
StarPinkER