Java Can';t运行ProcessBuilder

Java Can';t运行ProcessBuilder,java,processbuilder,Java,Processbuilder,我正在和ProcessBuilder的人斗争!我想在中运行实用程序“nativetoascii”。我可以在命令行上运行它,也可以通过Runtime.exec()运行,没有问题 我的代码是: ' String command = "\"C:\\Program Files (x86)\\Java\\jdk1.6.0_32\\bin\\native2ascii\""; String encoding = " -encoding "; String utf8 = "UTF8 ";

我正在和ProcessBuilder的人斗争!我想在中运行实用程序“nativetoascii”。我可以在命令行上运行它,也可以通过Runtime.exec()运行,没有问题

我的代码是:

'     
  String command = "\"C:\\Program Files (x86)\\Java\\jdk1.6.0_32\\bin\\native2ascii\"";
  String encoding = " -encoding ";
  String utf8 = "UTF8 ";
  String inputFile = "C:\\Users\\joe\\Desktop\\resources\\encoding\\orig.properties ";
  String outputFile ="C:\\Users\\joe\\Desktop\\resources\\encoding\\convertedViaProcessBuilder.properties";

  List<String> commandArgs = new ArrayList<String>();
  commandArgs.add(command);
  commandArgs.add(encoding);
  commandArgs.add(utf8);
  commandArgs.add(inputFile);
  commandArgs.add(outputFile);

  ProcessBuilder builder = new ProcessBuilder(commandArgs);
  Process p = builder.start();
  p.waitFor();

很明显,我对命令及其参数做了一些错误的处理。谁能告诉我我做错了什么?谢谢。

您的第二个参数是
“-encoding”
它应该是
“-encoding”
当您运行命令时,空格很重要。;)

您是否尝试过在命令参数周围不使用空格。因为参数已经被“解析”了,所以我认为不应该有空格。同样,你也不需要在命令名周围加引号-在命令行上,你需要它们告诉命令行解析器它是一个名称,即使它包含空格,但是有了ProcessBuilder,你可以把参数作为一个列表来传递,这样就不需要解析器了。这就解决了问题,我真不敢相信我被这么基本的东西难住了!谢谢大家。@user1412992很容易忽略空格,因为空格并不存在
Usage: native2ascii [-reverse] [-encoding encoding] [inputfile [outputfile]]