Java:从配置文件读取&;基于值高效地执行测试

Java:从配置文件读取&;基于值高效地执行测试,java,data-structures,mapping,Java,Data Structures,Mapping,好的,我确信我不会以最有效的方式来做这件事,我正在寻求一些关于如何更有效地做这件事的帮助 config.txt文件包含键/值对,其中键=测试名称,值=是否执行测试 解析配置文件并创建要运行的测试列表 运行那些测试 下面是我目前正在做的事情 通过传递给助手函数parseConfig(我的配置文件上的一个BufferedReader)来创建ArrayList。parseConfig返回一个树集,我在ArrayList的构造函数方法中使用它 parseConfig迭代配置文件中的文本行。若该值指

好的,我确信我不会以最有效的方式来做这件事,我正在寻求一些关于如何更有效地做这件事的帮助

  • config.txt文件包含键/值对,其中键=测试名称,值=是否执行测试
  • 解析配置文件并创建要运行的测试列表
  • 运行那些测试
下面是我目前正在做的事情

  • 通过传递给助手函数parseConfig(我的配置文件上的一个BufferedReader)来创建ArrayList。parseConfig返回一个树集,我在ArrayList的构造函数方法中使用它
  • parseConfig迭代配置文件中的文本行。若该值指示执行测试,则将测试名称添加到树集合。返回树集
  • 使用增强的for循环遍历ArrayList。增强for循环的主体基本上是一个很长的if/else语句…if key.equals(“thisTest”),执行thisTest,else if key.equals(thatest),执行thatTest…等等

这是我真正不喜欢的最后一部分。它工作得很好,但似乎笨拙且效率低下。因为我的ArrayList是使用树集构建的,所以它是按排序顺序排列的。我想使用一种更优雅、更确定的方法来将密钥映射到要执行的测试。有人能帮我吗?

我想做些别的事情,因为你需要做的就是测试这个列表的条目

我会一行一行地对其应用正则表达式,从我看来,它将非常简单,只有两个组和一个积极的前瞻性,这样我可以只提取所有匹配的行,并从中创建一个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);
}

答案是创建一个
HashMap
对象。

我不确定你是否理解我的问题,或者我是否理解你的答案,但我不确定这是否是我要寻找的。我已经发布了后续问题。
  SomeTest=true
  SomeOtherTest=false
  YetAnotherTest=1
  LastTest=yes
  GogoTest=no
  OneMore=0