12

I would like to pass multiple parameters to a ProcessBuilder and the parameters to be separated by a space.

Here is the command:

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

I need to provide a space after "fcrc" and after "-p" and in between "filename" and the "addressRange".

0

3 Answers 3

28

You don't need to include spaces. The ProcessBuilder will deal with that for you. Just pass in your arguments one by one, without space:

ProcessBuilder pb = new ProcessBuilder(
    dir + "library/crc",
    "-s",
    fileName,
    addressRanges);
Sign up to request clarification or add additional context in comments.

2 Comments

Ya thats correct but the crc exe which Im using requires space between the crc and -s and between filename and the address ranges passed, otherwise it throws a file not found exception
@mee are you sure the "file not found" error is not caused by something else? If you're using a relative path as the fileName then you will presumably need to set the correct working directory for the process (using pb.directory(...) before you call pb.start())
14

We need spaces between arguments in commandline because the commandline need to know which is the first argument, which is the second and so on. However when we use ProcessBuilder, we can pass an array to it, so we do not need to add those spaces to differentiate the arguments. The ProcessBuilder will directly pass the command array to the exec after some checking. For example,

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

The above code will work perfectly.

Moreover, you can use

Runtime.getRuntime().exec("java -cp C:/testt Test");

But it is more convenient to use ProcessBuilder, one reason is that if our argument contains space we need to pass quote in Runtime.getRuntime().exec() like java -cp C:/testt \"argument with space\", but with ProcessBuilder we can get rid of it.

ProcessBuilder processBuilder = new ProcessBuilder("command", "The first argument", "TheSecondWithoutSpace");

Comments

-4

Use it like this:

new java.lang.ProcessBuilder('netstat -an'.toString().split('\\s'))).start()

3 Comments

In Java ' is used for a single character, not a string
why did I receive down votes, what the heck¿? You haven't used a JSP webshell with 1 parameter it seems, come on, use that CMD_ARRAY, now and tell me, are you going to pass a number of parameters based on the command you want to execute¿? Don't make me laugh ...... these down votes I have received should be the other way round OMG!
This post is several months old dude. Also your code does not compile, that's maybe why your pot was downvoted.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.