2013-01-04 51 views
1

我一直在試圖將我的頭圍繞此。有沒有錯誤,但我沒有看到想要的答案:無法檢索命令行選項

public class Clopts { 
    private static Options options = null; 

    private static final String InputDir = "i"; 
    private static final String OutputDir = "o"; 
    private String input; 
    private CommandLine cmd = null; 

    static{ 
      options = new Options(); 
      options.addOption(InputDir, false, "Input Directory"); 
      options.addOption(OutputDir, false, "Output Directory. " + OutputDir); 
     } 

    public static void main(String[] args) { 
     Clopts cliProg = new Clopts(); 
     cliProg.loadArgs(args); 
    } 

    private void loadArgs(String[] args){ 
     CommandLineParser parser = new PosixParser(); 
     try { 
      cmd = parser.parse(options, args); 
     } catch (ParseException e) { 
      System.err.println("Error parsing arguments"); 
      e.printStackTrace(); 
      System.exit(1); 
     } 

     if (cmd.hasOption(InputDir)){ 
      input = cmd.getOptionValue(InputDir); 
      System.out.println(input); // This is always null :(
     } 
    } 
} 

雖然我傳遞參數-i foo -o bar 但我沒有看到富或酒吧每次我看到的是空的時間。

另外我想println在主模塊中。我如何從命令行獲得選項,然後打印出選項。

+1

我正在使用現有的庫..我正在使用apache commons cli庫嗎? – Fraz

+0

當你'System.out.println(args);'?會發生什麼? –

+0

按照Java命名約定,你應該寫'private static final String INPUT_DIR =「i」;' – jlordo

回答

4

當你定義你的選擇:

options.addOption(InputDir, false, "Input Directory"); 
options.addOption(OutputDir, false, "Output Directory. " + OutputDir); 

false意味着他們不帶參數的。如果你想要一個選項值,你必須在這裏指定true

+0

真棒..我認爲這些標誌是可選或必填字段.. ??如何在主模塊中打印這些選項.. – Fraz

+1

不確定你的意思,打印使用/幫助信息? – Henry

+0

是的,但也..現在println是在「loadArgs」方法,但我如何打印這些參數在「主」方法? – Fraz