2012-08-14 89 views
0

好吧,我確定我不會以最有效的方式解決此問題,我正在尋找一些有關如何更高效地執行此操作的幫助...Java:從配置文件中讀取並根據值有效執行測試

  • 的config.txt文件包含鍵/值對,其中key =測試值的名字=是否執行測試通過解析配置文件
  • 和創建測試列表運行
  • 運行那些測試

這裏是我目前如何去做這件事

  • 通過傳遞給我的配置文件的幫助函數parseConfig,一個BufferedReader來創建一個ArrayList。 parseConfig返回一個TreeSet,我在我的ArrayList的構造方法中使用
  • parseConfig迭代配置文件中的文本行。如果value指示要執行測試,請將測試名稱添加到TreeSet。返回TreeSet。
  • 使用增強for循環迭代ArrayList。增強的for循環體基本上是一個長期if/else語句...如果key.equals( 「這項測試」),進行這項測試,否則,如果key.equals(thatTest),執行thatTest ...等

這是我真正不喜歡的最後一部分。它工作得不錯,但它似乎笨拙和低效。由於我的ArrayList是使用TreeSet構造的,因此它按排序順序排列。我希望使用更優雅和確定性的方法將我的密鑰映射到要執行的測試。誰能幫我?

回答

0

答案是創建一個HashMap <String, Method>對象。

1

我會做點別的事情,因爲所有你需要做的這個清單是測試它的條目與否。

我會一行一行地在它上面應用一個正則表達式,從我看到它將會非常簡單,只有兩個組和一個積極的向前看,這樣我就可以提取所有匹配行並創建一個ArrayList超出這些,然後迭代ArrayList並測試每個方法。如果您可以提供一些關於文件外觀的輸入信息,我可以幫助您使用代碼。

UPDATE

比如這裏是我想出的代碼(在5分鐘內可以改善),會做解析:

/** 
* 
* @param inputFile location of inputFile 
* @return {@link ImmutableSet} of tests to run 
*/ 
public static ImmutableSet<String> parseConfigFile(File inputFile){ 
    HashSet<String> innerSet = Sets.newHashSet(); 
    BufferedReader bufferedReader = null; 
    try { 
     bufferedReader = new BufferedReader(new FileReader(inputFile)); 
     String newLine = ""; 
     while((newLine = bufferedReader.readLine()) != null){ 
      Pattern p = Pattern.compile("(.+)=(?=yes|1|true)(.+)"); 
      Matcher m = p.matcher(newLine); 

      while(m.find()){ 
       //System.out.println(m.group(1)); 
       innerSet.add(m.group(1)); 
      } 
     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if(bufferedReader != null) 
      try { 
       bufferedReader.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
    } 

    return ImmutableSet.copyOf(innerSet); 
} 

我睾丸它看起來像一個文件例如:

SomeTest=true 
    SomeOtherTest=false 
    YetAnotherTest=1 
    LastTest=yes 
    GogoTest=no 
    OneMore=0 
+0

我不確定你是否不明白我的問題,或者我不明白你的答案,但我不確定那是我尋找的。我發佈了[this](http://stackoverflow.com/questions/11960780/java-method-invoke-this-args-nullpointerexception)後續問題。 – 2012-08-14 21:11:14

+0

@DanForbes沒問題,很好,你有你的答案! :) – Eugene 2012-08-15 07:19:18