Java:从Config文件中读取&根据价值有效地进行测试

时间:2012-08-14 17:57:56

标签: java data-structures mapping

好的,我确信我不会以最有效的方式解决这个问题,我正在寻求一些有关如何更有效地做到这一点的帮助......

  • config.txt文件包含键/值对,其中key = test of name和value =是否执行测试
  • 解析配置文件并创建要运行的测试列表
  • 运行这些测试

以下是我目前的情况

  • 通过传递给我的配置文件中的辅助函数parseConfig,一个BufferedReader来创建一个ArrayList。 parseConfig返回一个TreeSet,我在我的ArrayList
  • 的构造函数方法中使用它
  • parseConfig迭代配置文件中的文本行。如果value表示执行测试,则将测试名称添加到TreeSet。返回TreeSet。
  • 使用增强的for循环迭代ArrayList。增强for循环的主体基本上是一个长if / else语句...如果key.equals(“thisTest”),执行thisTest,否则如果key.equals(thatTest),执行thatTest ... etc

这是我真的不喜欢的最后一部分。它运作良好,但它看起来笨拙和低效。由于我的ArrayList是使用TreeSet构造的,因此它按排序顺序排列。我想使用更优雅和确定性的方法将我的键映射到要执行的测试。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

我会做其他事情,因为你需要做的就是测试它的条目。

我会逐行采用并在其上应用正则表达式,从我看到它只是两个组和一个正面的前瞻将非常简单,这样我只能提取所有匹配的行并创建一个ArrayList中的那些,然后迭代ArrayList并测试每个方法。如果您可以提供文件外观的一些输入,我可以帮助您使用代码。

<强>更新

例如,这里是我提出的代码(在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

答案 1 :(得分:0)

答案是创建一个HashMap <String, Method>对象。