2012-09-16 64 views
2

我正在與ProcessBuilder人員苦苦掙扎!我想運行該工具'nativetoascii'。我可以在命令行上運行它,也可以通過Runtime.exec()運行,沒有任何問題。無法運行ProcessBuilder

我的代碼是:

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

我也寫代碼來讀取過程的輸出,它說:

Usage: native2ascii [-reverse] [-encoding encoding] [inputfile [outputfile]] 

顯然,我做錯了與命令及其參數。誰能告訴我我做錯了什麼?謝謝。

+0

您是否嘗試過在命令參數周圍沒有空格?由於參數已經被「解析」,我認爲你不應該在那裏有空格。 –

回答

1

你的第二個參數是" -encoding "它將是"-encoding"當你運行一個命令時空間很重要。 ;)

+1

同樣,你不需要命令名稱周圍的引號 - 在命令行中,你需要它們告訴命令行解析器它是一個名稱,儘管它包含空格,但是使用ProcessBuilder將參數作爲列表傳遞,不涉及解析器。 –

+0

重要的一點是,不涉及解析。 –

+0

修復它,我不能相信我被如此基本的東西難倒!謝謝你們。 – Glenn